我正在为即将发布的 Chrome“非安全显示”v56 版本做准备。
我经营一家网站服务:example.com
我为每个客户提供一个服务子域名:cust1.example.com
,,cust2.example.com
等等。
几年前,我配置了服务以接受www.cust1.example.com
、www.cust2.example.com
等。主要是因为客户总是在所有内容前面添加“www”。我想确保他们看到的是他们的网站,而不是“无效域名”消息。
我购买了通配符 SSL 证书*.example.com
来覆盖客户网站。显然,这对 等网站不起作用www.cust1.example.com
。我的大多数客户都没有使用 HTTPS,所以这不是问题。
随着现代浏览器强制使用 https,这已经成为一个问题。
我尝试使用 mod_rewrite 来修复该问题。
RewriteCond %{HTTP_HOST} ^www\.([^\.]+)\.example\.com$ [NC]
RewriteCond %{SERVER_PORT} =443
RewriteRule ^(.*)$ https://%1.example.com/$1 [R=302,E=nocache:1,L]
注意:我在测试解决方案时使用 302,这样我就不会意外地将重定向推送到浏览器的缓存中,并且永远不会再更改它。
问题是,当您在浏览器中启动 HTTPS 时,服务器提供的重定向仍然会触发 ERR_CERT_COMMON_NAME_INVALID 错误,然后它才能重定向以删除“www”并进入具有有效证书的页面。
如何在不触发浏览器的不安全回复?
答案1
这会将 www.example.com 重定向到https://example.com
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ https://example.com/$1 [R,QSA,L]