使用Apache将HTTP重定向到HTTPS

dut*_*d92 6 apache ubuntu mod-rewrite redirect

我有一个问题,使用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>
Run Code Online (Sandbox Code Playgroud)

HTTPS主机在default-ssl中定义在同一目录中.

访问服务器的本地IP地址,重定向似乎工作正常.但是,通过FQDN访问它,它没有.使用FQDN,该站点在端口5443处可用,该端口在防火墙中映射到服务器上的443,因此可能与该问题有关.我不能直接使用端口443,因为它在另一台服务器上使用此IP地址.

为进一步澄清,以下是有效链接:

    https://website:5443
    https://192.168.200.80:443
Run Code Online (Sandbox Code Playgroud)

重定向在这里工作:

    http://192.168.200.80
Run Code Online (Sandbox Code Playgroud)

但是下面给出了400 Bad Request,这是需要重定向的地方:

    http://website:5443/
Run Code Online (Sandbox Code Playgroud)

"您的浏览器发送了此服务器无法理解的请求.原因:您正在向支持SSL的服务器端口说明HTTP.请使用HTTPS方案访问此URL."

Ste*_*oka 10

这完全有可能.以下内容将所有http重定向到https网址.

<VirtualHost *:80>
    ServerName   mydomainname.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

确保加载重写模块mod_rewrite并启用它.


Mar*_*rio 3

这里的问题是初始 HTTP 请求:这将不起作用,因为服务器无法理解它在端口 443 上接收请求(如响应代码所示)。

如果未指定端口,则协议http默认使用端口 80https到端口 443。

这也是本地重定向起作用的原因。我敢打赌,如果您通过http://website/(使用端口 80 的正确端口转发)访问该页面,它也会工作。另请注意,无论如何,您仅针对端口 80 进行定义,因此它对于发送到(或)VirtualHost的请求无效。website:5443website:443

一般来说,您需要一台在单个端口上接受 HTTP 和 HTTPS 请求的服务器。不确定任何流行的服务器实际上支持类似的东西,因为(我认为)它本质上违反了规范。