使用.htaccess将特定页面301重定向至新域名遇问题求助
解决.htaccess中301重定向的意外路径追加问题
嘿,我来帮你搞定这个困扰!你遇到的问题根源是Apache的Redirect指令的前缀匹配机制——它会把原URL中匹配前缀之后的部分自动追加到目标URL末尾,导致了不符合预期的跳转。
比如你写的这条规则:
Redirect 301 /dan-carr-gear-list/travel-gear https://dancarrphotography.com/gear/travel/
当访问旧路径/dan-carr-gear-list/travel-gear时,原本应该直接跳转到目标URL,但因为Redirect是前缀匹配,它可能误把原路径的travel-gear当成了需要追加的后缀,或者和其他规则产生了冲突,最终导致跳转到https://dancarrphotography.com/gear/travel-gear/。
给你两个靠谱的解决方案,都能实现精确匹配,避免这种意外:
方案1:用RedirectMatch做精确匹配
RedirectMatch支持正则表达式,可以精准锁定单个路径,不会有额外的路径追加:
RedirectMatch 301 ^/dan-carr-gear-list/travel-gear$ https://dancarrphotography.com/gear/travel/
这里的^表示路径的起始位置,$表示路径的结束位置,确保只有完全匹配/dan-carr-gear-list/travel-gear的URL才会被重定向。
方案2:用RewriteRule(更适合批量处理)
如果你的20个页面都需要重定向,RewriteRule会更灵活可控,同样支持精确匹配:
RewriteEngine On RewriteRule ^dan-carr-gear-list/travel-gear$ https://dancarrphotography.com/gear/travel/ [R=301,L]
RewriteEngine On:确保重写引擎处于开启状态(如果你的.htaccess里还没加的话)^dan-carr-gear-list/travel-gear$:精确匹配目标旧路径[R=301,L]:标记为301永久重定向,并且L表示这是最后一条执行的规则,避免后续规则干扰
额外排查小提示
- 测试前一定要清空浏览器缓存!301重定向会被浏览器强缓存,旧规则可能还留在缓存里导致测试不准
- 检查你的.htaccess文件里是否有其他冲突的重定向规则,建议把精确匹配的规则放在所有前缀匹配规则的前面
- 如果新站点的
/gear/travel/是一个目录,确保服务器的DirectorySlash设置正常(默认是开启的,会自动给目录添加斜杠)
内容的提问来源于stack exchange,提问作者shuttermuse
相关产品推荐
相关产品推荐

