如何在IIS中通过URL Rewrite/web.config将2个相似URL重定向至不同URL?
解决IIS URL Rewrite重定向规则冲突问题
你遇到的两个旧URL都跳转到第一个新地址的问题,是因为原规则存在几个关键逻辑错误,我来帮你修正并解释清楚:
问题根源分析
- 颠倒的
match逻辑:你设置了match url="(.*)" negate="true",这意味着规则只对「不匹配任何请求路径」的请求生效((.*)匹配所有路径,negate=true是反选),完全违背了你要匹配特定旧URL的需求,导致规则执行逻辑混乱。 - 条件
pattern格式错误:{HTTP_HOST}{REQUEST_URI}的值是「主机名+请求路径」(比如example.com/used-2-3/),并不包含http://前缀,所以你写的pattern="http://example.com/used-2-3/"永远无法正确匹配。 - 缺少精确匹配约束:原规则没有对路径做精确匹配,即使条件修正,也可能出现部分匹配的隐患。
修正后的web.config规则
下面是可以正常工作的优化版规则:
<rule name="Used Conveyors Redirect" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^used-2-3/$" /> <conditions> <!-- 同时匹配带www和不带www的域名 --> <add input="{HTTP_HOST}" pattern="^(www\.)?example.com$" /> </conditions> <action type="Redirect" url="http://example.com/eq/ex?action=283" redirectType="Permanent" /> </rule> <rule name="Used Power Vans" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^used-2-3-2/$" /> <conditions> <add input="{HTTP_HOST}" pattern="^(www\.)?example.com$" /> </conditions> <action type="Redirect" url="http://example.com/eq/ex?action=435" redirectType="Permanent" /> </rule>
关键配置说明
match url="^used-2-3/$":^和$分别表示路径的开头和结尾,精确匹配请求路径/used-2-3/(IIS的match url不包含开头的/,所以写法如此)。- 主机匹配优化:
^(www\.)?example.com$用正则同时覆盖带www和不带www的域名,比两个独立条件更简洁高效。 stopProcessing="true":确保匹配到当前规则后,不再处理后续规则,彻底避免规则冲突。
替换原规则后,重启IIS或刷新配置,两个旧URL就会分别正确重定向到对应的新地址了。
内容的提问来源于stack exchange,提问作者delphiman




