IIS URL Rewrite配置:如何排除指定站点不执行重定向
解决多站点共用web.config时的定向排除问题
这问题在多站点共用配置文件的场景里很常见,核心思路就是给你的重定向规则加上域名匹配条件,只让站点1和站点2触发重定向逻辑,站点3直接跳过规则,保持原有运行状态。
修改方案:给重写规则添加域名过滤条件
你只需要在现有的重定向规则里,新增一组conditions,精确匹配站点1和站点2的域名,这样站点3的请求会因为不满足条件而跳过这条规则。具体代码如下:
<rewrite> <!-- 你已定义的RewriteMap规则保持不变 --> <rewriteMaps> <rewriteMap name="RedirectRules"> <add key="/old-page1.html" value="https://site4.com/new-page1.html" /> <add key="/old-page2.html" value="https://site4.com/new-page2.html" /> <!-- 其他已有的映射规则 --> </rewriteMap> </rewriteMaps> <rules> <!-- 修改后的重定向规则,新增域名过滤条件 --> <rule name="RedirectSite1And2ToSite4" stopProcessing="true"> <!-- 条件组:只要匹配站点1或站点2的域名,就触发规则 --> <conditions logicalGrouping="MatchAny"> <!-- 精确匹配站点1的域名,注意转义点号 --> <add input="{HTTP_HOST}" pattern="^site1\.com$" /> <!-- 精确匹配站点2的域名 --> <add input="{HTTP_HOST}" pattern="^site2\.com$" /> <!-- 如果需要支持www前缀,添加下面两行 --> <!-- <add input="{HTTP_HOST}" pattern="^www\.site1\.com$" /> --> <!-- <add input="{HTTP_HOST}" pattern="^www\.site2\.com$" /> --> </conditions> <!-- 匹配所有请求路径,查找RewriteMap中的规则 --> <match url=".*" /> <!-- 优先使用RewriteMap中的映射规则 --> <action type="Redirect" url="{RedirectRules:{REQUEST_URI}}" redirectType="Permanent" /> <!-- 当映射中没有匹配项时,重定向到站点4的首页 --> <action type="Redirect" url="https://site4.com" redirectType="Permanent" appendQueryString="false" /> </rule> </rules> </rewrite>
关键细节说明
条件逻辑:
使用logicalGrouping="MatchAny"表示只要请求的域名是站点1或站点2,就会触发这条重定向规则;站点3的域名不满足任何条件,规则会直接跳过,站点3保持原有运行状态。精确域名匹配:
正则表达式里的^site1\.com$是精确匹配域名,注意把域名里的点号用反斜杠转义(\.),因为正则中点号是通配符,不转义会匹配任意字符。如果你的站点有www前缀或者其他子域名,记得补充对应的匹配规则。规则终止:
设置stopProcessing="true"可以确保当请求匹配这条规则后,不再执行后续的重写规则,避免出现冲突或意外的重定向。默认重定向:
当请求的路径不在你的RewriteMap中时,会触发默认的重定向到站点4首页,你可以根据需求调整这个默认目标地址。
测试建议
你可以用IIS管理器中的URL Rewrite模块的「测试规则」功能,分别输入站点1、站点2、站点3的请求URL,验证规则是否正确触发重定向或跳过。比如:
- 输入
http://site1.com/old-page1.html,应该跳转到https://site4.com/new-page1.html - 输入
http://site3.com/any-page.html,应该直接返回站点3的内容,不会被重定向
内容的提问来源于stack exchange,提问作者P R
相关产品推荐
相关产品推荐

