如何合并两条.htaccess的RewriteRule规则解决重定向过多问题?
合并.htaccess规则解决重定向次数过多问题
你遇到的重定向死循环是因为规则执行顺序错误、缺少域名匹配前置判断、原重定向规则协议不符合需求导致的。调整规则顺序,把外部域名/协议跳转放在最前面,内部后缀重写放在后面,再补充匹配判断条件即可解决,完整代码如下:
RewriteEngine On # 统一跳转到https+www域名(外部跳转,优先执行) RewriteCond %{HTTPS} !=on [OR] RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] # 内部重写移除.html后缀(服务器内部处理,不改变地址栏URL) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^([^\.]+)$ $1.html [L]
规则说明
- 请务必确保外部跳转规则放在内部重写规则之前,否则仍可能出现循环问题
- 优先执行外部跳转规则,所有非https、不带www的请求会一次性跳转到目标域名,避免后续重写操作触发重复跳转
- 内部后缀重写新增了目录排除、文件存在判断,避免把不存在的路径、真实目录路径也强行追加.html后缀
- 原规则中第二条的
http已调整为https,匹配你需要跳转至https域名的需求 - 内部重写属于服务器层面的路径映射,不会改变浏览器地址栏的URL,也不会再次触发重定向规则匹配,完全满足移除.html后缀的需求
内容的提问来源于stack exchange,提问作者Bee
相关产品推荐
相关产品推荐

