Apache2 Vhost HTTP 到 HTTPS 重定向无法以奇怪的方式工作

Apache2 Vhost HTTP 到 HTTPS 重定向无法以奇怪的方式工作

今天我第一次为我的网站设置了 HTTPS。我从以下代码开始:

<VirtualHost *:443>
    ServerName website.tld
    DocumentRoot /var/www/website.tld

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/website.tld.crt
    SSLCertificateKeyFile /etc/apache2/ssl/website.tld.key

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/website.tld/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
</VirtualHost>

这完全没问题。现在我想让网站将 http 重定向到 https,并在顶部添加以下内容:

<VirtualHost *:80>
    ServerName website.tld
    ServerAlias www.website.tld
    Redirect 301 / https://website.tld
</VirtualHost>

<VirtualHost *:443>
     ServerName www.website.tld
     Redirect 301 / https://website.tld
</VirtualHost>

现在,如果我从 http 访问该网站,它会重定向到 https,但是一旦我进入 https 网站,我就会收到来自 Chrome 的错误“ERR_SSL_PROTOCOL_ERROR”。有人能帮忙吗?

答案1

此条目的问题

<VirtualHost *:443>
     ServerName www.website.tld
     Redirect 301 / https://website.tld
</VirtualHost>

是您省略了该 VirtualHost 的 TLS 证书。这会在 HTTPS 端口上创建一个纯 HTTP 虚拟主机。

该配置应该看起来更像这样

<VirtualHost *:443>
     ServerName www.website.tld
     Redirect 301 / https://website.tld

     SSLEngine on
     SSLCertificateFile /etc/apache2/ssl/www.website.tld.crt
     SSLCertificateKeyFile /etc/apache2/ssl/www.website.tld.key
</VirtualHost>

或者当现有证书 website.tld.crt 也对 wwww 域有效时,指向该文件。

答案2

欢迎来到 ServerFault!我相信 Freddy 是对的。您的 #1 问题是,端口 443 有两个单独的 VirtualHost 定义。删除“www”重定向,然后使用 .htaccess 规则将“www”重定向到没有 www 的域名

顺便说一句(可能有帮助),Stack Overflow 上的这个讨论似乎与您要做的事情相关:请注意,在 stackoverflow.com 对话中,操作系统是 Ubuntu:https://stackoverflow.com/questions/3286707/apache-ssl-configuration-error-ssl-connection-error/27568209

相关内容