我在Ubuntu Server 12.04上使用mod_rewrite强制将HTTP请求重定向到HTTPS时遇到了一个问题。
我的/etc/apache 2/sites-available/default文件如下:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>
字符串
HTTPS主机在同一目录中的default-ssl中定义。
访问服务器的本地IP地址,重定向似乎工作正常。但是,通过路由器访问它,它不工作。使用路由器,该站点在端口5443处可用,该端口在防火墙中Map到服务器上的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。”
5条答案
按热度按时间ar5n3qh51#
这是完全可能的。下面的重定向所有http到https的网址。
字符串
确保你加载重写模块mod_rewrite并启用它。
tkclm6bt2#
这里的问题是初始HTTP请求:这将不起作用,因为服务器不会理解它在端口443上接收请求(如响应代码所示)。
如果未指定端口,则协议
http
默认为端口80,https
默认为端口443。这也是为什么你的本地重定向工作的原因。我敢打赌,如果你通过
http://website/
访问页面(正确的端口转发端口80),它也会工作。还要注意,你的VirtualHost
只定义了端口80,所以它不会对发送到website:5443
(或website:443
)的请求有效。一般来说,你需要一个服务器在一个端口上同时接受HTTP和HTTPS请求。不确定任何流行的服务器是否真的支持这样的东西,因为(我认为)它本质上违反了规范。
b5lpy0ml3#
字符串
ajsxfq5m4#
如果你想重定向您的网站从http:anything.example.com到https://anything.example.com.只需创建一个专用的主机.conf文件为/etc/httpd/conf.d/dedicated.conf和其他conf文件为virtual.conf.
这是专用服务器托管conf文件重定向到https. x1c 0d1x
字符串
或者,如下面的注解中所述,我们也可以使用重定向:
型
3z6pesqy5#
如果有两个端口,一个用于http,另一个用于https,那么前面的解决方案可能会有所帮助。
但是,如果我们使用一个端口,那么这个问题就没有apache的官方解决方案。
对我来说,我做了一个解决方案,如下所示:
字符串
通过你自己的消息。* 有一个条件 *,这两个短语的长度应该相等。
所以,我用了自己的短语如下:
型
这是一个JavaScript代码来重定向页面。然后,从HTTP到HTTPS的交换已经为我解决了。