You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在IIS中通过URL Rewrite/web.config将2个相似URL重定向至不同URL?

解决IIS URL Rewrite重定向规则冲突问题

你遇到的两个旧URL都跳转到第一个新地址的问题,是因为原规则存在几个关键逻辑错误,我来帮你修正并解释清楚:

问题根源分析

  1. 颠倒的match逻辑:你设置了match url="(.*)" negate="true",这意味着规则只对「不匹配任何请求路径」的请求生效((.*)匹配所有路径,negate=true是反选),完全违背了你要匹配特定旧URL的需求,导致规则执行逻辑混乱。
  2. 条件pattern格式错误{HTTP_HOST}{REQUEST_URI}的值是「主机名+请求路径」(比如example.com/used-2-3/),并不包含http://前缀,所以你写的pattern="http://example.com/used-2-3/"永远无法正确匹配。
  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

火山引擎 最新活动