借助.htaccess将二级域名作为主域名缺失资源的备选地址
问题原因
你的自定义重定向规则失效的核心原因是规则顺序错误:
- WordPress的rewrite规则中包含
[L]标志,该标志会让Apache执行完当前规则后立即终止后续所有规则的处理。 - 当请求
/subfolder/下不存在的文件时,会匹配WordPress规则里的RewriteCond %{REQUEST_FILENAME} !-f和!-d条件,随即被转发到index.php,同时终止后续规则运行,导致你的自定义重定向完全没机会触发。
解决方法
将自定义重定向规则移到WordPress规则块的前面,具体位置在HTTPS强制跳转规则之后、# BEGIN WordPress之前。同时可添加QSA标志确保查询字符串被正确传递(可选,但更稳妥)。
修改后的完整.htaccess代码如下:
# BEGIN LSCACHE # END LSCACHE # BEGIN NON_LSCACHE # END NON_LSCACHE RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 自定义重定向规则 - 移至WordPress规则前 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^subfolder/(.*)$ https://secondary.domain/$1 [R=301,L,QSA] # BEGIN WordPress # Les directives (lignes) entre « BEGIN WordPress » et « END WordPress » sont générées # dynamiquement, et doivent être modifiées uniquement via les filtres WordPress. # Toute modification des directives situées entre ces marqueurs sera surchargée. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
额外说明
QSA标志的作用是确保原请求的查询字符串(比如示例中的?1678369663)被附加到重定向后的URL中,完全匹配你的需求场景。- 测试前建议清除浏览器缓存,因为301重定向会被浏览器缓存,可能导致测试结果不准确。
内容的提问来源于stack exchange,提问作者Entretoize
相关产品推荐
相关产品推荐

