WordPress多站点.htaccess配置求助:/tr/非shop路径出现404错误
WordPress多站点路径规则修复方案
问题背景
现有双语言WordPress站点A(支持en/tr),计划将另一个WordPress站点B部署在/tr/shop/目录下,需实现以下路由规则:
/en/及其所有子路径指向站点A/tr/及其所有子路径(除/tr/shop/外)指向站点A/tr/shop/及其子路径指向站点B
当前问题:/en/和/tr/shop/访问正常,但/tr/下其他路径出现404错误,原因是/tr/是语言前缀而非真实物理目录,原.htaccess规则未正确处理虚拟路径的请求拦截。
修正后的.htaccess代码
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / # 优先处理/tr/shop/路径,转发到站点B RewriteRule ^tr/shop(/.*)?$ /tr/shop/index.php [L] # 处理/tr/下非shop的路径,转发到站点A RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^tr(/.*)?$ /index.php [L] # 站点A的核心WordPress重写规则 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
代码说明
- 规则顺序调整:先匹配
/tr/shop/的请求,确保这类请求优先转发到站点B的入口文件,避免被后续规则覆盖。 - 虚拟路径处理:针对
/tr/下非shop的路径,添加文件/目录存在性判断,仅当请求的路径不是真实文件或目录时,才转发到站点A的index.php,解决虚拟语言前缀导致的404问题。 - 移除无效规则:删除原代码中
RewriteRule ^tr(/.*)?$ - [L]这条规则,它会直接终止后续重写,导致站点A无法处理/tr/下的虚拟路径请求。
内容的提问来源于stack exchange,提问作者Burak Ibis
相关产品推荐
相关产品推荐

