我为一个小企业设置了一个新域名,他们希望https://在他们的域名中,因为他们以前的主机默认提供了它(以前的主机也有旧域名)。
当我在/etc/apache2/sites-available/设置我的服务器configuration块时,我将所有请求转发到新的域,如下所示:
<VirtualHost *:80> # example2 - NEW, example1 - OLD # Simply redirecting all traffic to https ServerName example2.com ServerAlias www.example2.com ServerAlias example1.com ServerAlias www.example1.com Redirect 301 / https://example2.com/ </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin [email protected] ServerName example2.com DocumentRoot /var/www SSLEngine on SSLCertificateFile /path/to/ssl/example2/example2.crt SSLCertificateKeyFile /path/to/ssl/example2/example2.com.key SSLCACertificateFile /path/to/ssl/example2/example2.com-bundle </VirtualHost> <VirtualHost *:443> # If the old site is arrived at via HTTPS, redirect to new ServerName example1.com ServerAlias www.example1.com Redirect 301 / https://example2.com/ </VirtualHost> </IfModule>
所以,对http://example2.com和http://example1.com的请求正在工作并redirect到https://example.com 。 但是,对https://example1.com的请求不会redirect到https://example2.com ,而是向最终用户显示“可怕的屏幕”,警告他们连接可能不是私人的,等等。 (谷歌浏览器)
旧域(example1.com)的DNS区域文件指向example2.com服务器的IP,我想我的服务器configuration是正确的。 为什么一切正确的redirect除了旧网站的https://之外呢?
对https://example1.com的请求不会redirect到https://example2.com ,而是向最终用户显示“吓人的屏幕”,警告他们连接可能不是私密的
这是你的问题:
<VirtualHost *:443> # If the old site is arrived at via HTTPS, redirect to new ServerName example1.com ServerAlias www.example1.com Redirect 301 / https://example2.com/ </VirtualHost>
这是一个在HTTPS端口(443)和example1.com上匹配的虚拟主机,但不能为虚拟主机运行TLS。 (请记住,您可以在任何您喜欢的端口上运行纯文本HTTP或encryption的HTTPS。在端口443上运行纯文本HTTP将是不常见的,但是不受任何标准的禁止,所以Apache可以让您这样做。
获取example1.com和www.example1.com的有效证书,然后在这个vhost中添加如下内容:
SSLEngine on SSLCertificateFile /path/to/ssl/example1/example1.crt SSLCertificateKeyFile /path/to/ssl/example1/example1.com.key SSLCACertificateFile /path/to/ssl/example1/example1.com-bundle
它应该工作得更好。
作为与您的具体问题无关的一个附加要点,除非您已经完全重新devise了url,否则请尽量将人员redirect到新网域上的相应位置,而不仅仅是转到首页。 打破每个人现有的联系是非常烦人的,所以只有当你绝对必须做到这一点。