htaccess Rewrite规则执行第一条后如何触发第二条规则运行?
.htaccess 重定向规则调整方案
问题根源
你当前配置的逻辑会触发两次301跳转:
- 首次请求带www的地址时,命中第一条去www规则,返回301跳转到无www的https地址(末尾无斜杠),
[L]标记会终止本次请求的后续规则执行,因此加斜杠规则不会在本次请求中生效 - 客户端收到第一次跳转响应后,会重新发起请求到无www的地址,此时才会命中第二条加斜杠规则,再次跳转至带斜杠的最终地址
在线测试工具大多默认只追踪单次跳转的规则匹配,因此会提示第二条规则未命中。
优化后配置(推荐,单次跳转到位)
直接合并去www、加https、补斜杠的逻辑,只需一次跳转即可到达最终地址,同时避免静态资源被误加斜杠:
# 统一处理域名修正、HTTPS跳转、尾部斜杠补全 RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR] RewriteCond %{REQUEST_URI} !/$ # 排除静态资源文件(带后缀的资源) RewriteCond %{REQUEST_URI} !\.[a-zA-Z0-9]+$ RewriteRule ^(.*?)/?$ https://example.com/$1/ [R=301,L] # 自定义旧链接跳转规则 RewriteRule ^old-link/$ https://example.com/new-link/ [R=301,L]
规则说明
- 用
[OR]标记关联两个触发条件:只要请求带www、或者地址末尾没有斜杠,就进入规则处理 - 增加静态资源排除逻辑,避免给.css、.js、.png等带后缀的资源地址强制加斜杠,导致资源加载失败
- 重写目标直接写最终的规范地址,一步完成所有修正,减少不必要的跳转次数,SEO和用户体验都更好
内容的提问来源于stack exchange,提问作者Ricardo Carvalho
相关产品推荐
相关产品推荐

