使用 .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:在所有页面上强制 www,在一个页面上强制 https,在所有其他页面上强制 http