使用 .htaccess 将 HTTP 流量强制为 HTTPS

Posted

技术标签:

【中文标题】使用 .htaccess 将 HTTP 流量强制为 HTTPS【英文标题】:Forcing HTTP traffic to HTTPS using .htaccess 【发布时间】:2016-06-27 00:52:12 【问题描述】:

对我来说,这是我永远做不到的事情。我尝试了很多不同的方法,但似乎没有一个对我有用。

我想强制所有尝试访问 HTTP 的流量自动重定向到 HTTPS。

我的 .htaccess 看起来像这样:

RewriteEngine On
RewriteCond %HTTPS off
RewriteCond %HTTP_HOST ^(www.)yourdomainname.com
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R=301]

不确定它是否相关,但我的网站正在使用 Apache 的 VPS 上运行。

如果有人可以帮助我解决问题以及我做错了什么,将不胜感激。

编辑:这是我的 httpd.conf 文件:http://pastebin.com/VMYXGi0X

【问题讨论】:

【参考方案1】:

有可能在请求实际到达您的 apache 服务器之前发生了一些路由,因此 HTTPS 可能无法在那里处理。您可以尝试替换此行:

RewriteCond %HTTPS off

RewriteCond %HTTP:X-Forwarded-Proto ^http$ [NC]

捕获原始协议。

【讨论】:

刚刚尝试换掉,很遗憾没有结果【参考方案2】:

找到问题了。

按照this 指南,我调整了httpd.conf 中的虚拟主机以适应我的网站。但是,这会将我的 URL 发送到重定向循环中,从而产生另一个问题。

然后我发现 this *** 的答案非常有帮助,解释说亚马逊的 X-Forwarded-Proto 是这样的:

RewriteEngine On
RewriteCond %HTTP:X-Forwarded-Proto !https
RewriteRule !/status https://%SERVER_NAME%REQUEST_URI [L,R]

【讨论】:

以上是关于使用 .htaccess 将 HTTP 流量强制为 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .htaccess 在除一个目录 /images 之外的所有 URL 上强制使用 HTTPS?

如何使用 htaccess 强制 http-NOT https

使用 htaccess 强制下载图片

.htaccess:在所有页面上强制 www,在一个页面上强制 https,在所有其他页面上强制 http

htaccess:将所有域(https和http)重定向到新域

如何使用 htaccess 强制重定向到安全域 [重复]