如何通过htaccess配置避免HTTPS非www站点的重定向链问题
最优配置方案
你当前的多跳转问题是因为规则是分步骤独立判断的,每一项修正都会触发一次独立跳转,我们可以把协议、域名、尾部斜杠的修正逻辑整合,实现单次301跳转完成所有适配。
完整.htaccess代码
# 拦截libwww-perl恶意爬虫 RewriteCond %{HTTP_USER_AGENT} libwww-perl.* RewriteRule .* – [F,L] # 处理需补尾部斜杠的请求:一次性修正协议、www前缀、尾部斜杠 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} [^/]$ RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1/ [L,R=301,NE] # 处理无需补尾部斜杠的请求:一次性修正协议、www前缀 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301,NE]
规则说明
- 第一条跳转规则仅针对非真实文件、且路径末尾不带斜杠的请求,直接跳转至符合
https://www前缀、带尾部斜杠的目标地址,不会产生中间跳转 - 第二条跳转规则覆盖所有协议不满足HTTPS、或者域名不带www的请求,直接跳转至符合规范的目标地址
- 所有规则都保留了
NE参数避免特殊字符被转义,NC参数保证域名匹配不区分大小写
测试注意
测试前请清空浏览器缓存,301永久重定向会被浏览器长期缓存,旧的跳转规则可能影响测试结果。你也可以用curl -I 测试地址命令查看跳转链路,正常配置下只会返回一次301响应,Location字段直接指向最终规范地址。
内容的提问来源于stack exchange,提问作者user2270724
相关产品推荐
相关产品推荐

