apache2重定向到https:// www

时间:2016-11-01 17:47:15

标签: php .htaccess laravel-5 https apache2

我正在尝试将来自我的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,以免他们获得太多的重定向?

由于

2 个答案:

答案 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的情况。请先检查一下他们的安全规则是不是原因?