非www转www的.htaccess规则失效,请求技术帮助
非www转www重定向仅首页生效的解决方法
我为客户尝试多种.htaccess规则,目标是将所有非www域名的URL重定向到对应的www域名,但仅首页能触发301重定向,内页均无效。主机服务商为SG,当前.htaccess内容如下:
# BEGIN WordPress <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 # Redirection from non-www to www ---> latest rule used RewriteCond %{HTTP_HOST} ^example.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] AddHandler application/x-httpd-php81 .php .php5 .php4 .php3
先后尝试以下3种规则,均无法实现全站重定向:
test 1(与上述规则一致)
RewriteCond %{HTTP_HOST} ^example.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
test 2
RewriteEngine On RewriteCond %{HTTP_HOST} !^www. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
test 3
RewriteEngine On RewriteCond %{HTTP_HOST} !^www. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
解决思路与方案
核心原因
WordPress自带的Rewrite规则块中包含[L]标志,会终止后续规则的处理。如果重定向规则放在WordPress规则之后,内页请求会先被WordPress路由规则捕获并处理,重定向规则根本没有执行的机会,只有首页请求会触发重定向。
修正后的完整.htaccess配置
将重定向规则移至WordPress规则块之前,同时补充HTTPS协议的适配,避免协议不一致问题:
# 非www转www + 强制HTTPS <IfModule mod_rewrite.c> RewriteEngine On # 处理非www且未启用HTTPS的请求 RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301] # 处理非www但已启用HTTPS的请求 RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301] </IfModule> # BEGIN WordPress <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 AddHandler application/x-httpd-php81 .php .php5 .php4 .php3
额外注意事项
- 清除缓存:301重定向会被浏览器永久缓存,测试前请清除浏览器缓存或使用无痕模式访问,避免旧缓存影响测试结果。
- WordPress后台设置:进入WordPress后台「设置-常规」,确认「WordPress地址(URL)」和「站点地址(URL)」均设置为
https://www.example.com,避免WordPress生成非www的内部链接,导致重定向循环或失效。 - SG主机配置检查:确认SG主机已开启
mod_rewrite模块(SG主机默认开启,可通过cPanel的Apache模块管理页面验证)。
内容的提问来源于stack exchange,提问作者Bobby
相关产品推荐
相关产品推荐

