我在子域之间拆分了一些页面,并希望在某些情况下对不同子域上的不同页面进行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。
有什么建议吗?
答案 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”