WordPress站点.htaccess配置www域名重定向非www域名故障排查
WordPress www前缀访问异常与重定向配置问题
问题现象
- 访问不带www前缀的地址
http://herefor.digital时,站点首页加载正常 - 访问带
www.前缀的对应地址时重定向失效,页面直接展示站点根目录文件列表 - 异常截图:

现有配置
当前站点使用WordPress原生默认.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
计划添加的www转非www 301重定向规则如下:
RewriteEngine on RewriteCond %{HTTP_HOST} ^www.herefor.digital RewriteRule (.*) http://herefor.digital/$1 [R=301,L]
核心疑问:
- 上述301重定向规则语法是否正确
- 规则应当添加到
.htaccess的什么位置,之前自行添加后直接导致站点崩溃 - 站点正式访问地址为
http://herefor.digital
解决方案
规则有效性说明
你写的301跳转规则基础语法没有错误,之前添加后崩溃、www访问出文件列表的核心原因有两点:
- 规则放置位置错误,放在WordPress原生规则块内部或后方,重定向优先级失效,且WordPress会自动覆写
# BEGIN WordPress和# END WordPress标记之间的所有自定义内容 - www前缀对应的虚拟主机配置错误:要么和主站的文档根目录(DocumentRoot)指向不一致,要么没配置默认首页、开启了目录浏览,才会直接输出文件列表
正确配置步骤
- 先检查Apache虚拟主机配置,确认
www.herefor.digital和herefor.digital两个域名的文档根目录完全指向同一个WordPress安装目录,同时给www域名的配置加上Options -Indexes关闭目录浏览,避免再出现文件列表页。 - 301重定向规则必须放在
# BEGIN WordPress标记块的最上方,绝对不能插入WordPress自动维护的规则块内部。 - 调整优化后的完整
.htaccess内容参考如下:
# www 301跳转到非www域名 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.herefor\.digital$ [NC] RewriteRule (.*) http://herefor.digital/$1 [R=301,L] </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
对原规则的优化点说明:
- 给域名中的
.增加转义符\,匹配逻辑更严谨,避免误匹配其他相似域名- 给Host匹配条件加
[NC]标记,不区分大小写匹配,覆盖大写WWW前缀的访问场景- 把规则包在
mod_rewrite模块存在的判断逻辑中,避免服务器未开启重写模块时直接报500错误
生效验证
配置保存后,先清空浏览器缓存(301重定向会被浏览器强制缓存),再访问带www前缀的域名测试,确认可以正常跳转到非www域名且站点加载正常。
内容的提问来源于stack exchange,提问作者Hugo-dev
相关产品推荐
相关产品推荐

