我试图重定向所有不安全的HTTP请求在我的网站(例如http://www.example.com)到HTTPS (https://www.example.com)。我如何在.htaccess文件中做到这一点?

我用的是PHP。


当前回答

Apache文档不建议使用重写:

要重定向http url到https,请执行以下操作: < VirtualHost *: 80 > ServerName www.example.com 重定向/ https://www.example.com/ < /虚拟主机> < VirtualHost *: 443 > ServerName www.example.com #……SSL配置在这里 < /虚拟主机>

这段代码应该放在主服务器配置文件中,而不是像问题中要求的那样放在.htaccess中。

这篇文章可能是在问题被提出和回答之后才出现的,但似乎是目前的做法。

其他回答

我发现了一种方法,强制我的网站的所有页面从http重定向到https的模拟页面,为我工作。

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

如果你正在使用Apache, mod_rewrite是最简单的解决方案,网上有很多关于如何做到这一点的文档。例如:http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html

我发现最好的方式https和www域名是

RewriteCond %{HTTPS} off 
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

如果您无法直接访问站点的apache配置,许多托管平台仍然以这种方式受到限制,那么我实际上会推荐两步方法。为什么Apache自己的文件,你应该首先使用他们的配置选项mod_rewrite的HTTP到HTTPS。

首先,如上所述,你将设置你的.htaccess mod_rewrite规则:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

然后,在你的PHP文件中(你需要在任何适合你的情况下这样做,一些网站将通过一个PHP文件汇集所有请求,其他网站根据他们的需求和正在发出的请求提供各种页面):

<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>

需要在任何可能在不安全环境中暴露安全数据的代码之前运行上述代码。因此,您的站点通过HTACCESS和mod_rewrite使用自动重定向,而您的脚本确保不通过HTTPS访问时不提供输出。

我想大多数人都不这么想,因此Apache建议在可能的情况下不要使用这种方法。但是,它只需要在开发端进行额外的检查,以确保用户数据的安全。希望这能帮助那些由于我们的托管服务端的限制而不得不考虑使用非推荐方法的人。

这将会有帮助。

RewriteEngine On


RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

此外,参考这更多的细节。如何重定向Http到Https?