IIS配置301永久重定向规则后部分场景跳转不生效问题求助
配置错误原因
- 错误1:
{HTTP_HOST}服务器变量仅包含域名部分,不携带http/https协议前缀,你原规则中pattern写的(http://)?(www)?olddomain\.(com)和(https://)?(www)?olddomain\.(com)永远无法匹配到请求,导致旧域名的判断逻辑完全失效。 - 错误2:匹配非www前缀域名的正则
^[^www]逻辑错误,[^www]是正则排除单个字符的语法,实际作用是匹配第一个字符不是w的域名,完全无法实现“匹配所有不带www前缀的域名”的需求。 - 错误3:旧域名未配置SSL证书,所有
https://开头的旧域名请求会先触发SSL证书校验失败错误,用户浏览器会先报不安全提示,根本无法走到重定向规则逻辑。 - 错误4:你使用了301永久重定向,浏览器、搜索引擎都会长期缓存重定向结果,部分页面跳转符合预期部分不符合,本质是本地/CDN/搜索引擎缓存了之前的旧跳转规则,和新配置不统一导致的。
修正后的web.config重写规则
<rewrite> <rules> <clear /> <!-- 规则1:所有旧域名请求直接跳转到新域名带www+HTTPS --> <rule name="Redirect OldDomain to NewDomain" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTP_HOST}" pattern="^(www\.)?olddomain\.com$" /> </conditions> <action type="Redirect" url="https://www.newdomain.com/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule> <!-- 规则2:新域名强制HTTPS+www前缀 --> <rule name="Force NewDomain HTTPS and WWW" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTPS}" pattern="off" /> <add input="{HTTP_HOST}" pattern="^newdomain\.com$" /> </conditions> <action type="Redirect" url="https://www.newdomain.com/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule> </rules> </rewrite>
必须完成的配套操作
- 给旧域名
olddomain.com和www.olddomain.com申请免费的SSL证书,并在服务器上完成配置,保证HTTPS访问旧域名时不会先报证书错误。 - 修正配置后先将
redirectType改为Temporary(即302重定向)测试所有跳转逻辑正常后,再改回Permanent(301),避免错误规则被长期缓存。 - 清理浏览器缓存、CDN缓存,再提交Google Search Console重新抓取,清除之前缓存的错误跳转结果。
内容的提问来源于stack exchange,提问作者Gökhan
相关产品推荐
相关产品推荐

