HTTP 到 HTTPS 重定向循环

HTTP 到 HTTPS 重定向循环

首先,我知道这个问题已经有一百万份了,但是经过几个小时尝试所有解决方案后,我还是无果。

因此,我想将 Apache Web 服务器上的所有传入 HTTP 流量重定向到 HTTPS。我尝试了几种方法,大多数方法都会导致以下两种结果之一:a) 重定向循环或 b) 仅重定向最顶层的页面(即没有目录发送到 HTTPS)。

我当前的虚拟主机文件如下所示:

<IfModule mod_ssl.c>  
    <VirtualHost *:80> 
    ServerName roboguy99.co.uk
    Redirect / https://roboguy99.co.uk/
    </VirtualHost>
    <VirtualHost *:443>
        ServerAdmin [email protected]
    ServerAlias www.roboguy99.co.uk
        ServerName roboguy99.co.uk
        DocumentRoot /var/www/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </VirtualHost>
</IfModule>

当前配置导致重定向循环。

任何帮助是极大的赞赏。

可能有用的信息:

  • Apache 2.2.22
  • 在 Debian(Raspberry Pi)上运行
  • 从 Windows 8.1、Google Chrome 访问

我这周不在,所以如果我没有回答任何问题,那就是原因。我还打算在我不在的时候删除重定向,因此目前无法对网站进行实时测试。

答案1

添加这些行虚拟主机 *:80

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

确保您已启用mod_rewrite

a2enmod rewrite
service apache2 restart

检查结果获得

wget --spider domain.tld

答案2

尝试改变你的

Redirect / https://roboguy99.co.uk/

RewriteRule ^/(.*) https://roboguy99.co.uk/$1 [R,L]

在您的第一个上,您仅当用户请求时重定向/使用我向您提出的建议,您将重定向所有内容,并进一步添加用户请求的任何内容/

相关内容