请求解决.htaccess将www子域名重定向至非www子域名问题
解决HTTPS下www.sub.domain.com重定向到非www子域名的问题
嘿,我之前也踩过子域名重定向的坑,尤其是带HTTPS的场景,常规规则经常因为服务器配置或者SSL的问题失效。给你几个针对性的解决办法,按顺序试应该能搞定:
方案1:精准匹配子域名的重定向规则
把这段代码放在你的.htaccess文件最顶部(规则顺序很重要,要放在其他Rewrite规则之前,避免被干扰):
RewriteEngine On # 匹配所有访问www.sub.domain.com的请求(忽略大小写) RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC] # 永久重定向到https://sub.domain.com,保留原路径和参数 RewriteRule ^(.*)$ https://sub.domain.com/$1 [L,R=301]
小提示:测试阶段可以先用R=302临时重定向,确认生效后再改回R=301(永久重定向对SEO更友好)。
方案2:先强制HTTPS再处理www重定向
如果你的服务器同时接受HTTP和HTTPS请求,建议先统一转到HTTPS,再处理www的问题,避免两种规则冲突:
RewriteEngine On # 把所有HTTP请求强制转到HTTPS RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301] # 再处理www.sub.domain.com到非www的重定向 RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC] RewriteRule ^(.*)$ https://sub.domain.com/$1 [L,R=301]
注意:确保你的SSL证书同时覆盖www.sub.domain.com和sub.domain.com,否则会出现证书错误,导致重定向直接失败。
方案3:检查Apache虚拟主机配置
有时候.htaccess的规则会被Apache的虚拟主机配置覆盖,你需要确认在443端口的虚拟主机块里允许.htaccess生效:
<VirtualHost *:443> ServerName sub.domain.com ServerAlias www.sub.domain.com # 必须开启AllowOverride All,否则.htaccess规则不会生效 AllowOverride All # 下面是你的SSL证书配置(按需填写) SSLCertificateFile /path/to/your/cert.crt SSLCertificateKeyFile /path/to/your/private.key SSLCertificateChainFile /path/to/your/chain.crt </VirtualHost>
很多新手会忽略这个点——如果虚拟主机里没开AllowOverride All,.htaccess写再多规则都是白搭。
验证重定向是否生效
改完配置后,你可以用两种方式验证:
- 打开浏览器开发者工具的「Network」面板,访问
https://www.sub.domain.com,看请求状态码是否是301 Moved Permanently,且Location指向https://sub.domain.com; - 用命令行工具
curl测试:
返回结果里的curl -I https://www.sub.domain.comHTTP/1.1 301 Moved Permanently和Location: https://sub.domain.com/就是生效的标志。
内容的提问来源于stack exchange,提问作者Ava Template
相关产品推荐
相关产品推荐

