我已经在网站的子域上安装了 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.com
到http://domain.com
。
这是我的虚拟主机。
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
提供错误的 VirtualHost,因为没有带有 的*:443
VirtualHost 。ServerName
domain.com
为了解决这个问题,我尝试这样做:
domain.com
<VirtualHost *:80>
ServerName domain.com
DocumentRoot /var/www
</VirtualHost>
<VirtualHost *:443>
ServerName domain.com
Redirect / http://domain.com/
</VirtualHost>
我感觉像这样应该工作。(它应该将https
请求重定向到http
,从而提供正确的文档根目录。)
但是,当我这样做时,Apache2 甚至不会启动。它给出了以下错误:
[error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
在此先非常感谢您的指导。
答案1
这行不通。这不是 SSL 的工作方式。要启用 SSL,您必须拥有 SSLEngine On 以及服务器证书和密钥的指令。
仅仅监听 443 是没有帮助的。
如果您不打算在 domain.com 上运行 SSL,那么理想情况下您不应尝试通过 HTTPS 访问它。您的用户尝试通过 https 访问 domain.com 是否有有效的用例?