Apache mod_rewrite:domain – >使用通配符SSL的www.domain

我有一个Apache 2.2服务器和* .domain.com的通配符SSL证书,并为80和443设置了一个mod_rewrite规则集,可以正确地将domain.com的请求redirect到www.domain.com:

RewriteCond %{HTTP_HOST} ^domain.com RewriteRule ^(.*)$ https://www.domain.com$1 [R=permanent,L] 

(这是443的那个; 80上的那个只是在'https'中省略了's')。

这个部分对于http和https都是正确的 – 它重写 – 但是这并不能解决我想要修复的问题。 特别是,当有人去https://domain.com ,他们会得到一个证书警告,因为* .domain.com通配符证书不匹配只有domain.com。 如果他们select接受证书并继续,则重写将正常进行,并且正常的locking图标replace愤怒的locking图标。 问题是,他们首先得到警告 – 他们必须select在重写完成之前忽略证书警告。 在尝试执行SSL协商之前,是否有正确的方法将stream量发送到https://domain.comhttps://www.domain.com ? 看起来像mod_rewrite正在做这件事。

SSL协商总是在HTTP请求开始之前发生,无法避免。

解决此问题的唯一方法是获取同时包含domain.com*.domain.com的新证书。

正如Tero所指出的那样,SSL协商是在mod_rewrite启动之前进行的。这意味着解决这个问题的唯一方法就是获得一个对domain.com有效的证书。

由于Apache支持SNI,因此它可以为不同的主机名提供不同的证书,因此您可以在像StartSSL这样的公司获得便宜或免费的额外证书。

然而,以我的经验,人们很less在他们的地址栏中inputhttps:// ,所以如果你只是确保http://domain.com被直接redirect到https://www.domain.com ,没有问题。