如何在web.config中配置两类301重定向规则?
在web.config中配置两类301重定向的最优方案
要同时实现根域名定向和页面通配定向,核心是控制规则匹配顺序——根域名规则必须放在最前面,因为IIS的URL重写规则是从上到下依次匹配的,一旦匹配成功就会停止后续规则(只要设置stopProcessing="true")。
以下是完整的配置代码,直接放到web.config的<system.webServer>节点内即可:
<rewrite> <rules> <!-- 规则1:旧站点根域名定向到指定路径 --> <rule name="Root Redirect" stopProcessing="true"> <match url="^$" /> <!-- 匹配空路径(根域名) --> <conditions> <add input="{HTTP_HOST}" pattern="^oldsite\.org$" /> <!-- 匹配旧域名 --> </conditions> <action type="Redirect" url="https://newsite.org/this-is-thenewsite" redirectType="Permanent" /> <!-- 301永久重定向 --> </rule> <!-- 规则2:旧站点任意页面定向到新站点同名页面 --> <rule name="Wildcard Page Redirect" stopProcessing="true"> <match url="(.*)" /> <!-- 捕获所有非空路径 --> <conditions> <add input="{HTTP_HOST}" pattern="^oldsite\.org$" /> <!-- 匹配旧域名 --> <add input="{REQUEST_URI}" pattern="^/$" negate="true" /> <!-- 排除根路径,避免和规则1冲突 --> </conditions> <action type="Redirect" url="https://newsite.org/{R:1}" redirectType="Permanent" /> <!-- 用捕获的路径{R:1}拼接新URL --> </rule> </rules> </rewrite>
关键细节说明
- 规则顺序:根域名规则在前,确保用户访问
oldsite.org或oldsite.org/时直接触发第一个规则,不会被通配规则误匹配。 stopProcessing="true":每个规则都开启该属性,匹配成功后立即停止后续规则执行,既提升效率又避免冲突。- 路径捕获:第二个规则用
(.*)捕获旧页面的完整路径,通过{R:1}引用捕获值,实现同名页面的精准映射。 - 根路径排除:第二个规则通过
negate="true"排除根路径,双重保障不会和第一个规则重叠触发。
测试注意事项
- 确保IIS服务器已安装URL重写模块(未安装的话,需要在服务器管理器的角色功能中添加)。
- 测试前清空浏览器缓存,因为301重定向会被浏览器强缓存,旧缓存可能导致测试结果失真。
- 通过浏览器开发者工具的「网络」面板查看响应状态码,确认返回
301 Moved Permanently。
内容的提问来源于stack exchange,提问作者ScottD
相关产品推荐
相关产品推荐

