我的网站有证书,但不是通配符证书。所以是example.com,而不是* .example.com。
我认为这不是问题,我将通过mod_rewrite将所有访客重定向到正确的URL:
RewriteEngine On
RewriteBase /
# Following two lines to strip machine name
RewriteCond %{HTTP_HOST} !^example.com [NC]
RewriteRule ^(.*)$ https://example.com%{REQUEST_URI} [L,R=301]
# Following two lines make sure the https version is always served
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com%{REQUEST_URI} [L,R=301]
现在,重定向实际上起作用了。有人输入https://www.example.com/page时,他最终将被重定向到https://example.com/page。
但是...
浏览器首先显示警告https://www.example.com不安全。仅当我添加一个异常时,它才会被重定向到不会产生证书错误的https://example.com/page。
我在这里做什么错了?
答案 0 :(得分:1)
什么都没有。 SSL协商在传输(TCP)级别而不是HTTP上进行(即使使用SNI时也是如此),但要点是,证书对于所请求的域无效。当启动与www.
的连接时,浏览器将请求证书,并将URL与证书中的CN
进行比较,由于该URL不存在,因此将发出警报。
要解决此问题,您将需要同时包含ServerName和ServerAlias名称的证书。您也许可以尝试一些提供DNS HTTP重定向的DNS提供商,但是现在quite easy就是获得证书的原因。