htaccess配置后非www域名页面无法跳转至其他域名问题求助
问题原因
- 重定向规则放置顺序错误:你将自定义301规则放在了WordPress默认路由规则之后,WordPress的规则会先将所有非真实文件/目录的请求转发至
index.php处理,后续的重定向规则根本不会被触发。www域名下规则能生效,大概率是主机商侧有前置的www跳转规则先完成了匹配,非www作为主域名直接执行当前配置就会被前置路由拦截。 - 不同模块规则混用:你用了mod_alias模块的
Redirect指令,和外层mod_rewrite的规则分属不同Apache模块,执行优先级逻辑不一致,很容易出现匹配冲突。
修复方案
统一使用mod_rewrite语法编写重定向规则,且将自定义规则放在所有WordPress默认规则之前,修改后的完整配置如下:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 自定义301重定向规则(所有自定义规则都放在这块,WordPress规则之前) RewriteRule ^my-slug-here/?$ https://anotherdomain.example/some-slug-here/ [L,R=301,NC] # WordPress默认规则 不要修改下面的内容 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
规则说明
[L]:匹配到当前规则后停止执行后续规则,避免被WordPress默认路由覆盖R=301:指定为301永久重定向NC:匹配路径时不区分大小写,不需要可以删除/?$:同时匹配路径末尾带或不带斜杠的情况,/my-slug-here和/my-slug-here/都能命中规则
验证注意
修改配置后先清空浏览器缓存,301重定向会被浏览器长期缓存,直接测试可能会读取旧缓存导致结果不准,也可以用curl工具直接请求对应路径查看响应头验证。
内容的提问来源于stack exchange,提问作者user1990897
相关产品推荐
相关产品推荐

