我在使用 mod_rewrite 在 Ubuntu Server 12.04 上使用 Apache 2.2.22 强制将 HTTP 请求重定向到 HTTPS 时遇到问题。
我的 /etc/apache2/sites-available/default 文件如下:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>
HTTPS 主机在同一目录中的 default-ssl 中定义。
访问服务器的本地 IP 地址,重定向似乎工作正常。但是,通过 FQDN 访问它,它不会。使用 FQDN,该站点在端口 5443 上可用,该端口在防火墙中映射到服务器上的 443,因此这可能与问题有关。我不能直接使用端口 443,因为它正在被另一台服务器在此 IP 地址上使用。
为了进一步澄清,以下是有效链接:
https://website:5443
https://192.168.200.80:443
重定向在这里工作:
http://192.168.200.80
但是下面给出了 400 Bad Request,这就是需要重定向的地方:
http://website:5443/
“您的浏览器发送了一个此服务器无法理解的请求。原因:您正在向启用 SSL 的服务器端口发送纯 HTTP。请改用 HTTPS 方案访问此 URL。”