WordPress站点HTTPS+WWW全流量重定向异常:主域有效子页面失效
解决WordPress子页面仅重定向WWW不跳转HTTPS的问题
嘿,我之前也碰到过一模一样的问题!大概率是你的重定向规则顺序不对,或者被WordPress自带的rewrite规则给覆盖了,导致子页面的请求没走到你的重定向逻辑里。咱们一步步来搞定:
核心问题分析
你说根域名能正常跳转,但子页面只跳WWW不跳HTTPS,十有八九是把自定义重定向规则放在了# BEGIN WordPress注释之后——WordPress自带的规则会优先处理所有请求(包括子页面),你的重定向规则根本没机会执行就被接管了。
正确的解决方案
首先,把所有自定义重定向规则放在.htaccess文件的最顶部,也就是# BEGIN WordPress之前。然后用下面两种可靠的规则写法二选一:
写法一:分两步跳转(清晰直观)
先强制所有流量转到HTTPS,再统一转到WWW版本,适合需要分开调试的场景:
# 第一步:强制所有非HTTPS请求跳转至HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 第二步:强制非WWW域名跳转至WWW版本 RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 下面保留WordPress原有的规则,别改动 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
写法二:一步到位跳转(更高效)
用一条规则同时处理非HTTPS和非WWW的情况,直接跳转到最终的https://www.inspiresoftware.com,减少一次跳转请求:
RewriteEngine On # 匹配「非HTTPS」或者「非WWW」的请求 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. # 直接重定向到目标地址 RewriteRule ^(.*)$ https://www.inspiresoftware.com/$1 [L,R=301] # 下面保留WordPress原有的规则 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
重要注意事项
- 备份原.htaccess文件:修改前先复制一份存好,万一写错了能立刻恢复。
- 用301永久重定向:
R=301告诉搜索引擎和浏览器这是永久跳转,避免重复跳转和影响SEO。 - 清空浏览器缓存再测试:旧的重定向规则可能被浏览器缓存了,测试前一定要清缓存或者用无痕窗口。
- 确认mod_rewrite开启:大多数主机默认开启这个模块,如果没开,联系你的主机商帮忙开启就行。
内容的提问来源于stack exchange,提问作者jphogan
相关产品推荐
相关产品推荐

