WordPress主站非www跳转正常 子目录站点跳转失效如何解决
问题根因
子目录下的.htaccess优先级高于根目录的.htaccess,默认不会继承根目录的重写规则。且你子目录配置的WP Rocket缓存规则、WordPress默认路由规则都带有[L]标记,请求匹配到这些规则后会直接终止重写流程,不会再执行根目录的非www跳转逻辑。
推荐解决方案(更稳定,无规则冲突风险)
直接在子目录的.htaccess所有规则的最顶部添加非www转www的专属跳转规则,修改后子目录的完整配置开头如下:
# 新增的跳转规则放在最顶部 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ https://www.example.com/sub/$1 [R=301,L] </IfModule> # 原有子目录的WP Rocket规则、WordPress默认规则保持不变,接在后面即可 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /sub/ ... # 你原来的剩余配置内容 </IfModule>
配置生效注意事项
- 修改完成后先清除WP Rocket的全站静态缓存
- 清除浏览器缓存(301重定向会被浏览器长期缓存,建议用无痕模式测试跳转效果)
可选替代方案
如果你不想修改子目录配置,也可以修改根目录的.htaccess,开启子目录规则继承,将根目录配置调整为:
RewriteEngine on # 让根目录的重写规则优先于所有子目录的规则执行 RewriteOptions InheritDownBefore RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
注意:该方案可能会和子目录的自定义重写规则产生冲突,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者Paul Martinez
相关产品推荐
相关产品推荐

