WordPress根目录tool子站WWW转非WWW跳转丢失路径问题
解决WordPress根目录下子目录WWW转非WWW跳转丢失路径问题
问题背景
- 网站根目录部署WordPress,域名为
mywebsite.com /tool子目录存在独立于WordPress的应用- 需求:将
/tool下所有带WWW的链接跳转至非WWW域名,同时完整保留目录结构与请求参数
当前错误表现
访问https://www.mywebsite.com/tool/dfy/index.php?campaign=33&token=1时,会错误跳转到https://mywebsite.com/dfy/?campaign=33&token=1,已完成WWW转非WWW,但丢失了tool目录和index.php文件路径。
错误原因分析
之前修改的根目录.htaccess中,针对tool目录的跳转规则硬编码了/tool/dfy/路径,导致匹配到tool/开头的请求时错误替换原有路径;同时规则顺序不合理,跳转逻辑被WordPress规则干扰。
正确解决方案
修改根目录的.htaccess文件,将WWW转非WWW的规则放在WordPress核心规则之前,确保所有请求先处理跳转,且不硬编码子目录路径:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 全局处理WWW转非WWW,保留完整请求路径 RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com [NC] RewriteRule ^(.*)$ https://mywebsite.com/$1 [L,R=301] # WordPress核心重写规则,排除tool目录 RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond $1 !^tool/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
规则说明
- 跳转规则前置:将WWW转非WWW的规则放在最顶部,确保所有请求(包括
/tool子目录)先完成域名跳转 - 完整路径匹配:
RewriteRule ^(.*)$ https://mywebsite.com/$1中的$1会完整保留请求的路径部分(如tool/dfy/index.php),不会丢失结构 - 排除WordPress接管:
RewriteCond $1 !^tool/确保/tool目录下的请求不会被WordPress的重写规则接管,直接访问独立应用 - HTTPS适配:跳转目标使用
https,符合当前主流加密访问需求
注意:无需在
/tool或/tool/dfy目录下额外添加.htaccess文件,根目录的规则已覆盖所有场景,且优先级更高。
内容的提问来源于stack exchange,提问作者Jorge Vila
相关产品推荐
相关产品推荐

