我在我的网站的子域上安装了SSL。 除了这个奇怪的行为,一切都完美无缺。
如果我将浏览器指向以下位置,则会提供以下文档根目录:
http://domain.com -> /var/www [GOOD] https://sub.domain.com -> /media/sub [GOOD] https://domain.com -> /media/sub [BAD]
该列表上的最后一个URL应该用于/var/www ,而不是/media/sub 。 换句话说,我想安全地将用户从https://domain.comredirect到http://domain.com 。
这是我的VirtualHosts。
domain.com
<VirtualHost *:80> ServerName domain.com DocumentRoot /var/www </VirtualHost>
sub.domain.com
<VirtualHost *:443> ServerName sub.domain.com:443 DocumentRoot /media/sub SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key </VirtualHost>
我所试过的
有人向我暗示, https://domain.com ://domain.com服务于错误的VirtualHost,因为没有*:443 VirtualHost和domain.com的ServerName 。
为了解决这个问题,我尝试了这样做:
domain.com
<VirtualHost *:80> ServerName domain.com DocumentRoot /var/www </VirtualHost> <VirtualHost *:443> ServerName domain.com Redirect / http://domain.com/ </VirtualHost>
我觉得这应该工作。 (它应该将https请求redirect到http ,从而提供正确的文档根目录。)
但是,当我这样做时,Apache2甚至不会启动。 它给了我这个错误:
[error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
提前感谢您的任何指导。
这是行不通的。 这不是SSL的工作原理。 为了启用SSL,您必须具有SSLEngine On和服务器证书和密钥的指令。
只是通过听443不会帮助。
如果您不打算在您的domain.com上运行SSL,那么理想情况下您不应该试图通过HTTPS访问它。 有没有一个有效的用例,为什么你的用户将尝试通过https访问domain.com?