子域名WWW转非WWW及HTTPS配置异常技术求助
解决HTTPS子域名WWW前缀重定向到非WWW的问题
首先得戳破你遇到的核心卡点:访问https://www.test.example.com时出现“连接不是私密连接”,这根本不是.htaccess规则的锅——浏览器在发起HTTPS请求时,会先验证域名的SSL证书是否匹配。如果你的证书只覆盖了test.example.com,没包含www.test.example.com,浏览器会直接阻断连接,连服务器上的.htaccess规则都轮不到执行。
第一步:先搞定SSL证书问题
要解决这个私密连接错误,你得先让证书同时覆盖两个域名:
- 要是用的Let's Encrypt这类免费证书,申请多域名SAN证书,把
test.example.com和www.test.example.com都加进去就行 - 嫌麻烦的话,直接申请通配符证书
*.example.com,所有子域名都能被覆盖
只有证书验证通过后,浏览器才会继续处理请求,你的重定向规则才有机会生效。
第二步:配置正确的.htaccess重定向规则
证书搞定后,用下面的规则就能把所有带WWW的请求(包括HTTPS)稳稳重定向到非WWW的HTTPS地址:
# 开启重写模块 RewriteEngine On # 强制所有非HTTPS请求跳转到HTTPS的非WWW地址 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://test.example.com/$1 [L,R=301] # 把HTTPS下的WWW前缀请求重定向到非WWW RewriteCond %{HTTP_HOST} ^www\.test\.example\.com$ [NC] RewriteRule ^(.*)$ https://test.example.com/$1 [L,R=301]
简单解释下规则:
[NC]表示不区分大小写,不管用户输入WWW.test.example.com还是小写的www都能匹配R=301是永久重定向,对SEO友好,不过测试阶段可以先用R=302临时重定向,确认没问题再改回301,避免浏览器缓存错误规则[L]表示匹配到这条规则后就停止执行后续规则,避免多余的处理
最后提两个注意点:
- 确保你的Apache服务器已经启用了
mod_rewrite模块 - 测试前记得清一下浏览器缓存,不然可能会看到旧的错误页面
内容的提问来源于stack exchange,提问作者Nirav Joshi
相关产品推荐
相关产品推荐

