我正在尝试让我的个人网站将非 https 请求重定向到该网站的 https 版本。在我的 httpd.conf 文件中设置一个这样的虚拟主机:
Listen 443
<VirtualHost *:443>
ServerAdmin admin@my-website.com
DocumentRoot /var/www/html
ServerName www.my-website.com
ErrorLog /var/www/logs/error_log
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/my-website.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my-website.com/privkey.pem
</VirtualHost>
完全正常。
但是,当我尝试为端口 80 设置虚拟主机时,如下所示:
Listen 80
<VirtualHost *:80>
ServerAdmin admin@my-website.com
ServerName www.my-website.com
RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
它被完全跳过,文件最终会从主服务器获得服务。我的设置有问题吗?
此外,正在发生的事情让我完全困惑。如果我将主服务器的 DocumentRoot 保持不变,但将其更改为端口 443 虚拟主机的一些测试 html,则当我转到网站的 http 版本时,我会看到测试 html,但该站点仍然显示不安全的 http 连接,而不是 https 版本。什么可能导致这种情况?