IIS7.5 URL重写正则表达式匹配时不应该

时间:2012-01-16 17:00:51

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

我在子域之间拆分了一些页面,并希望在某些情况下对不同子域上的不同页面进行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$" />

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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