.htaccess多子域名重定向带www前缀访问报错问题咨询
故障原因
现有规则仅对请求路径做了白名单判断,没有限定规则仅在访问旧域名时触发,也没有处理多子域名场景下的www前缀匹配逻辑。访问www.subdomain.olddomain.com这类带www前缀的子域名时,规则会和服务器默认的域名规范化逻辑(比如自动追加/剥离www)冲突,触发重定向循环报错。
修复方案
直接替换原有规则即可,规则增加了旧域名匹配判断,从根源避免循环重定向,同时兼容所有带/不带www前缀的旧域名子域名:
# 若配置文件中已存在RewriteEngine On配置,请勿重复添加该行 RewriteEngine On # 排除新域名的访问请求,避免规则自触发产生循环 RewriteCond %{HTTP_HOST} !^www\.newdomain\.com$ [NC] # 保留/exception路径白名单,该路径下所有请求不跳转 RewriteCond %{REQUEST_URI} !^/exception($|/) [NC] # 匹配到的所有请求统一做301永久重定向到新域名 RewriteRule ^(.*)$ https://www.newdomain.com/ [R=301,L]
调试注意事项
- 修改规则后必须清空浏览器缓存再测试,301永久重定向会被浏览器本地强缓存,不清缓存会持续展示之前的错误跳转结果
- 调试阶段可先将规则中的
R=301改为R=302(临时重定向),确认跳转逻辑完全正常后再改回301,减少缓存对调试的干扰 - 如果需要更精准的匹配范围,仅对旧域名下的所有子域名生效,可将第一条RewriteCond替换为
RewriteCond %{HTTP_HOST} \.olddomain\.com$ [NC],规则将不会对非旧域名后缀的请求产生任何影响
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

