.htaccess规则调整求助:域名跳转与文章页HTTPS重定向失效
问题根源:规则顺序错误
我一眼就看出问题所在了——你的HTTPS/WWW强制重定向规则被放在了WordPress的rewrite规则之后,而WordPress规则里的[L]标记会让Apache停止处理后续的所有规则,导致你的重定向逻辑根本没机会执行!
为什么会这样?
WordPress的核心rewrite规则里,RewriteRule ^index\.php$ - [L]和RewriteRule . /blog/index.php [L]都带有[L](Last)标记,意思是“一旦匹配到这条规则,就停止处理后面的所有规则”。当用户访问http://www.hkdcrandom.com/blog/lorem-ipsum/时,请求会先触发WordPress的内部路由规则,直接跳转到/blog/index.php,后续的重定向规则完全被忽略了。
修正方案:调整规则顺序
你需要把HTTPS/WWW的重定向规则移到WordPress规则的前面,让Apache先完成协议和域名的强制跳转,再处理WordPress的内部路由。另外,如果你还需要保留“访问根域名自动跳转到/blog/”的原有需求,也要把这条规则加进去(放在重定向规则之后,WordPress规则之前)。
完整修正后的.htaccess代码:
# 1. 强制HTTPS和WWW RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. [NC,OR] RewriteCond %{HTTPS} !on RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE] # 2. 保留原有需求:访问根域名跳转到/blog/ RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^ https://www.hkdcrandom.com/blog/ [R=301,L,NE] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /blog/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L] </IfModule> # END WordPress
关键说明:
- 规则执行顺序是从上到下的,所以必须先处理全局的协议/域名跳转,再处理特定路径的跳转,最后处理WordPress的内部路由。
R=301是永久重定向,适合生产环境;如果还在测试阶段,可以暂时换成R=302(临时重定向),避免浏览器缓存旧规则。NE标记确保URL中的特殊字符不会被转义,保证跳转后的路径正确。
内容的提问来源于stack exchange,提问作者Mohsin Abbas
相关产品推荐
相关产品推荐

