我正在尝试将来自我的laravel网站的任何请求重定向到https://www。因为谷歌分析抱怨。经过大量的谷歌搜索和研究后,我的.htaccess文件如下所示。 (我的站点在Elastic Load Balancer后面的AWS EC2上运行)
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
当我保存新的.htaccess文件并重新启动apache时,我在Chrome中遇到504错误,说网站www.example.com重定向了你太多次了。尝试删除您的Cookie。
当我删除我的cookie或我从隐姓埋名访问example.com时,它完美无缺!但是,如何强制用户删除以前的cookie,以免他们获得太多的重定向?
由于
答案 0 :(得分:1)
我终于找到了解决方案。我使用X-Forwarder-Proto标头来检查ELB收到的请求是http还是https。然后我结合了上面的规则,它有效!
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteCond %{HTTP:X-Forwarder-Proto} ^http$ [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
答案 1 :(得分:0)
如果您正在使用AWS,并且您已在简单的http中制定了所有https请求命中ELB和ELB请求实例的安全规则。所以这可能是ELB将https请求转换为http的情况。请先检查一下他们的安全规则是不是原因?