IIS URL重定向:多正则匹配规则优先级异常问题
解决IIS 7.5 URL重定向规则优先级问题
这问题很典型——核心原因是IIS URL重写规则的执行顺序不对!
IIS的URL重写模块是按照规则在web.config里的顺序从上到下匹配的,只要某条规则匹配成功,而且设置了stopProcessing="true",就会立刻执行这条规则,直接跳过后面所有规则。
你的Rule3(^sales/(.*))是个范围很宽的规则,所有以sales/开头的请求都会被它匹配,包括sales/fieldmarketing/和sales/naspo/。如果这条规则排在Rule1和Rule2前面,那请求进来时肯定先触发它,后面的具体规则根本没机会跑,这就是为什么访问/sales/naspo会被跳到销售根站点。
怎么解决?
- 调整规则顺序:把更具体的规则(
Rule1和Rule2)挪到最前面,宽泛的Rule3放在最后。这样当请求是/sales/fieldmarketing/或/sales/naspo/时,会先命中对应的具体规则,执行重定向后就停止处理;只有当请求是sales/下的其他路径时,才会触发Rule3。 - 别改
stopProcessing="true",这个配置是对的,它就是用来确保匹配当前规则后不再走后续规则的。
修改后的完整规则代码:
<!-- 具体规则优先 --> <rule name="Sales Field Marketing to SPO" enabled="true" stopProcessing="true"> <match url="^sales/fieldmarketing/(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> <action type="Redirect" url="https://newsite.com/sites/SalesFieldMarketing" appendQueryString="false" /> </rule> <rule name="Sales NASPO to SPO" enabled="true" stopProcessing="true"> <match url="^sales/naspo/(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> <action type="Redirect" url="https://newsite.com/sites/NASPO" appendQueryString="false" /> </rule> <!-- 兜底的宽泛规则放在最后 --> <rule name="Sales Root to SPO" enabled="true" stopProcessing="true"> <match url="^sales/(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> <action type="Redirect" url="https://newsite.com/sites/sales/" appendQueryString="false" /> </rule>
测试小贴士:
改完web.config后,记得清一下浏览器缓存再测试,不然可能会因为旧的重定向缓存导致测试结果不准。如果还是有问题,检查下是不是把规则写到了正确的web.config里(要确保是站点根目录下的那个文件)。
内容的提问来源于stack exchange,提问作者gsr51
相关产品推荐
相关产品推荐

