我们刚刚将域名从 www.olddomain.com 更改为 www.newdomain.com。我们在桌面上有许多快捷方式可以https://wwww.example.com。
我已经在 vhosts 和 SSL vhost 中设置了重写规则,如果域名不是 www.newdomain.com,则重定向到 www.newdomain.com。
VirtualHost 重写对于非 SSL 请求来说运行完美。但是,在 SSL 页面上,用户会收到无效的安全证书异常。重写规则似乎在此之前不会生效。但是,如果他们添加异常,重写规则会立即生效并将他们带到 www.newdomain.com。
看来证书异常发生在重定向之前,这是有道理的。这是 SSL 虚拟主机重定向。非 SSL 的几乎相同。
<VirtualHost _default_:443>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.newdomain\.com$ [NC]
RewriteRule ^ https://www.newdomain.com%{REQUEST_URI} [R=301,L]
....
<VirtualHost>
我已经读到 HTTP_HOST 不是 SSL 中的有效变量,但即使删除该条件并重定向所有请求仍然会产生异常。
在显示浏览器证书异常之前,我们可以做些什么来重定向到具有有效 SSL 证书和子域/域组合的新域?
答案1
鉴于重写/重定向直到用户发出请求后才会发生,因此对具有错误 SSL 证书的站点的 HTTPS 请求引发浏览器警告是完全合理的。
处理此问题的正确方法是在不同的 IP 上设置两个单独的 SSL 虚拟主机,每个虚拟主机都配置自己的 SSL 证书。然后,在 olddomain 虚拟主机中,根据需要设置重定向。
答案2
由于 HTTPS 在 host: 标头之前协商安全性,因此您必须获得同时包含旧站点和新站点的证书,或者需要将旧站点重定向器放在其自己的 IP 地址上。您可以玩弄端口游戏,但这可能会让您的用户感到困惑。
答案3
除了拥有 2 个独立 IP 和 2 个独立证书之外,另一种选择是使用加州大学证书将两个名称包含在一个证书中。然后,您可以重定向而不会收到任何错误。