.htaccess中的301重定向首先在原始URL上给出证书警告

时间:2019-07-10 15:51:17

标签: apache .htaccess mod-rewrite https

我的网站有证书,但不是通配符证书。所以是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

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

什么都没有。 SSL协商在传输(TCP)级别而不是HTTP上进行(即使使用SNI时也是如此),但要点是,证书对于所请求的域无效。当启动与www.的连接时,浏览器将请求证书,并将URL与证书中的CN进行比较,由于该URL不存在,因此将发出警报。

要解决此问题,您将需要同时包含ServerName和ServerAlias名称的证书。您也许可以尝试一些提供DNS HTTP重定向的DNS提供商,但是现在quite easy就是获得证书的原因。