如何在htaccess中配置301重定向实现旧域名URL跳转到新域名指定路径
问题根因
- 规则执行顺序错误:全站域名跳转规则(匹配所有路径
(.*),携带[L]终止标记)放置在配置靠前位置,请求触发该规则后会直接终止后续规则执行,写在文件末尾的单路径自定义跳转永远不会被触发。 - 指令混用冲突:同时使用mod_alias的
Redirect指令和mod_rewrite的RewriteRule指令,两类指令执行优先级不同,进一步导致自定义跳转失效。 - 协议配置不一致:全站跳转目标写的是HTTP协议的新域名,和预期的HTTPS跳转目标不符。
解决方案
按以下步骤修改.htaccess文件:
- 将单路径自定义跳转统一用
RewriteRule编写,放在RewriteEngine On之后、全站域名跳转规则之前,调整后会优先匹配特定路径的自定义跳转,未匹配到的请求才会执行全站域名拼接跳转,同时兼容两类跳转需求。 - 修正全站跳转的目标协议为HTTPS,和预期跳转目标的协议保持一致。
- 删除原来写在文件末尾的
Redirect 301 /x-ee-ee/sub-category/ererrre/ https://www.example1.com/category/exurl规则。 - 修改完成后清空浏览器缓存:301为永久重定向,浏览器会缓存旧跳转结果,建议用无痕模式测试避免缓存干扰。
修改后的核心配置段示例如下,其余原有防爆破、Joomla SEF等规则保持不变即可:
RewriteEngine On # 自定义单路径跳转 RewriteRule ^x-ee-ee/sub-category/ererrre/$ https://www.example1.com/category/exurl [R=301,L] # 全站旧域名跳转至新域名 RewriteCond %{HTTP_HOST} ^example.com$ [OR] RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteRule (.*)$ https://www.example1.com/$1 [R=301,L] # 后续原有其他规则保持不变
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

