【问题标题】:IIS7.5 URL Rewrite Regex matching when it shouldn'tIIS7.5 URL重写正则表达式匹配时不应该
【发布时间】:2012-02-18 11:20:11
【问题描述】:

我在子域之间拆分了一些页面,并希望在某些情况下对不同子域上的不同页面进行 URL 重写。除了文件中的最后两条规则外,一切都是重写规则。最后两条规则决定了将我固定的路径路由到哪个子域。

我这样做的方式是,如果我在路径前加上下划线 (_),那么它会保留在子域 A 上。如果我在路径前加上波浪号 (~),那么它会被重定向到子域 B。

所以我有这个规则:

<rule name="Login rule" stopProcessing="false">
        <match url="(.*?)/?old-path/Login\.aspx$" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="{HTTP_METHOD}" pattern="GET" />
        </conditions>
        <action type="Rewrite" url="~new-path/login.aspx" />
    </rule>

请注意网址末尾有一个 aspx。它继续处理,但我在重定向规则之前的列表末尾有一个通用的重写规则。这是为了删除子域 A (www) 上的所有 ASPX 扩展,但我想保留子域 B 的 ASPX 扩展(请不要建议删除第二个子域上的建议。谢谢 :)

<rule name="Remove ASPX" stopProcessing="false">
        <match url="^([^www\.]+)\.aspx$" />
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Rewrite" url="_{R:1}" />
    </rule>

问题是,这是行不通的,因为所有的 URL 都以 www 开头。我对正则表达式不是很好,但我猜我需要将此规则应用于所有包含波浪号的 URL。我试过这个,但它也不是真的有效:

<match url="^_+\.aspx$" />

基本上,我希望此规则忽略已重写为在其中包含 ~ 的 URL,但如果我将 _ 放在路径的开头,请删除 ASPX。

有什么建议吗?

【问题讨论】:

    标签: regex iis-7 url-rewriting url-rewrite-module


    【解决方案1】:

    如果我理解您的问题,那么您的 URL:“~new-path/login.aspx”并且您想重定向到“~new-path/login”,对吗?
    那么你的正则表达式应该是这样的:

    ^(.*~.*)\.aspx$
    

    注意:“www”是域名的一部分,不包含在匹配中。
    因此,如果您的完整 URL 是“http://www.mysite.com/~new-path/login.aspx”,那么只有“~new-path/login.aspx”部分将参与正则表达式匹配。

    模板 {R:1} 将包含第一组中的值(大括号):“~new-path/login”

    【讨论】:

    • 实际上是我要重定向的_。但是我将您的建议更改为^(.*_.*)\.aspx$,并且测试网址匹配!谢谢。
    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 2011-01-23
    • 2016-12-12
    • 2018-06-23
    • 1970-01-01
    • 2013-01-29
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多