首先,我知道这个问题已经有一百万份了,但是经过几个小时尝试所有解决方案后,我还是无果。
因此,我想将 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]
在您的第一个上,您仅当用户请求时重定向/使用我向您提出的建议,您将重定向所有内容,并进一步添加用户请求的任何内容/