.htaccess中Rewrite与Redirect规则共同使用失效问题排查
问题原因
- 你混用了
mod_alias的Redirect指令和mod_rewrite的重写规则,两个模块的规则独立运行:Redirect完成跳转逻辑后,后续的重写规则仍会匹配路径,将apar、bpar参数追加到跳转后的地址上 - 现有重写规则的
QSA标志默认会自动追加原有查询参数到目标地址,进一步导致参数残留
解决方案
不要用Redirect指令,改用mod_rewrite规则编写301跳转,且要放在所有重写规则的最顶部,写法示例:
# 单页面301跳转,放在所有规则最前面 RewriteRule ^old-page$ https://www.domain.co.uk/new-page? [R=301,L]
配置说明
- 放在规则最顶部:优先执行跳转逻辑,命中后直接终止后续所有规则运行
- 地址末尾的
?:明确要求丢弃所有原有查询参数,不会携带后续重写生成的apar/bpar参数 L标志:命中当前规则后不再执行后续任何重写规则,避免和后面的动态路由规则冲突
注意事项
修改配置后需要清理浏览器缓存再测试,301是永久跳转,浏览器会长期缓存旧的跳转结果,避免测试时读取到旧缓存。如果有多个跳转需求,按照相同格式依次写在最顶部即可。
内容的提问来源于stack exchange,提问作者RouthMedia
相关产品推荐
相关产品推荐

