htaccess配置页面302跳转子域名出现无限循环的解决方法
无限重定向的原因
之前使用的redirect 301规则未做域名匹配限制,会对当前站点绑定的所有域名生效,包含跳转目标tmp.maindomain.com。用户访问主域名页面触发跳转到tmp子域名后,tmp子域名下的同路径请求会再次匹配跳转规则,反复跳转形成死循环。同时301是永久重定向状态码,不符合临时跳转的需求。
可行配置方案
跳转规则必须增加域名判断逻辑,仅当请求来自主域名(包含带www、不带www两种形态)时才触发302临时跳转,避免影响子域名的正常访问。
Apache 环境(.htaccess/虚拟主机配置)
确保服务器已开启mod_rewrite模块,在主域名站点根目录的.htaccess文件,或主域名对应的虚拟主机配置段中添加以下规则:
RewriteEngine On # 匹配主域名(带/不带www),不区分大小写 RewriteCond %{HTTP_HOST} ^(www\.)?maindomain\.com$ [NC] # 匹配目标页面,返回302状态码跳转到子域名对应地址 RewriteRule ^mypage\.php$ https://tmp.maindomain.com/mypage.php [R=302,L]
参数说明:
[NC]:域名匹配忽略大小写[R=302]:显式指定302临时重定向状态码[L]:匹配到当前规则后停止执行后续重定向规则,避免规则冲突
Nginx 环境
直接在主域名对应的server配置块中添加以下匹配规则即可,Nginx按server块隔离域名配置,天然不会触发子域名的跳转循环:
location = /mypage.php { return 302 https://tmp.maindomain.com$request_uri; }
注意事项
配置完成后务必先清理浏览器缓存再测试:此前配置的301永久重定向会被浏览器本地长期缓存,不清缓存会出现规则不生效、依旧循环的假象。
内容的提问来源于stack exchange,提问作者sami hicham
相关产品推荐
相关产品推荐

