我的站点有证书,但它不是通配符证书。所以这是为了 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......
我在这里做错了什么?
什么都没有。SSL 协商发生在传输 (TCP( 级别,而不是 HTTP(即使使用 SNI 时(,但关键是证书对请求的域无效。当启动连接以www.
浏览器将请求证书并将 url 与证书中的CN
进行比较,由于它不存在,它将引发警报。
若要解决此问题,您需要一个同时包含服务器名称和服务器别名的证书。您可以尝试一些提供DNS HTTP重定向的DNS提供商,但是现在获得证书非常容易。