Apache Rewrite规则处理带尾斜杠URL失效,如何配置重定向?
解决Apache下example.com带尾斜杠重定向异常的问题
你的规则在覆盖范围和执行逻辑上有点小问题——当前配置只处理了非www的HTTP请求和所有HTTP请求,但当访问https://example.com/(包括浏览器自动将example.com/转为HTTPS的场景)时,没有对应的规则匹配,导致停留在无www的HTTPS地址;另外规则顺序也可能让部分请求触发了错误的重定向分支。
正确的配置方案
我们可以把「强制www前缀」和「强制HTTPS协议」两个需求合并成一组规则,确保所有访问场景都被覆盖:
RewriteEngine On # 匹配所有非www请求,或HTTP协议请求,统一重定向到HTTPS+www版本 RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC,OR] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
方案说明
[NC,OR]表示忽略主机头的大小写,并且两个条件满足任意一个就执行后续规则:- 只要请求的主机头不是
www.example.com(比如example.com),不管是HTTP还是HTTPS协议,都会被重定向到带www的HTTPS地址; - 只要请求是HTTP协议(哪怕主机头已经是
www.example.com),也会被重定向到对应的HTTPS地址。
- 只要请求的主机头不是
R=301是永久重定向,利于搜索引擎抓取和用户缓存优化;L表示这是最后一条执行的规则,匹配后不再触发后续Rewrite规则。
额外注意点
- 如果你之前测试过错误的重定向,记得清除浏览器缓存(301重定向会被浏览器持久缓存),否则可能看不到新规则的效果;
- 确保你的Apache服务器已经启用了
mod_rewrite模块; - 若规则放在
.htaccess文件中,要保证所在目录的AllowOverride设置为All或包含FileInfo权限。
内容的提问来源于stack exchange,提问作者Lexinton Ave
相关产品推荐
相关产品推荐

