.htaccess配置301跳转失效,如何实现旧域名路径定向到新域名对应路径
现有配置错误原因
- 重定向规则顺序错误:301规则放在了站点默认路由规则的后面,请求会先被路由到
index.php处理,无法触发后续的重定向规则 - 重定向目标配置错误:跳转目标错误填写为旧域名,且第二条
/Helium的匹配源错误写成了/Vidz Redirect是mod_alias的指令,和mod_rewrite的规则混用时容易出现匹配优先级冲突,统一用mod_rewrite写重定向规则可控性更高
修正后的完整.htaccess配置
RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / # 301重定向规则 必须放在所有路由规则之前 # 匹配所有/Vidz开头的路径(含子路径) RewriteRule ^Vidz(.*)$ https://www.newweb.example/Vidz$1 [L,R=301,NC] # 匹配所有/Helium开头的路径(含子路径) RewriteRule ^Helium(.*)$ https://www.newweb.example/Helium$1 [L,R=301,NC] # 站点默认路由规则 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
规则说明
R=301指定为永久重定向,L表示匹配到当前规则后不再执行后续重写规则,NC表示路径匹配时忽略大小写- 规则中的
(.*)和$1会自动将原路径的子路径拼接在新域名后,比如https://www.oldweb.example/Vidz/play/123.html会自动跳转到https://www.newweb.example/Vidz/play/123.html - 如果仅需要匹配根路径下的
/Vidz、/Helium(不需要适配子路径),可以将重定向规则替换为:RewriteRule ^Vidz$ https://www.newweb.example/Vidz [L,R=301,NC] RewriteRule ^Helium$ https://www.newweb.example/Helium [L,R=301,NC] - 配置修改后需要清空浏览器缓存再测试,避免旧的301缓存影响验证结果
内容的提问来源于stack exchange,提问作者Jessica Powell
相关产品推荐
相关产品推荐

