apache2 重定向到 https://www

apache2 redirecting to https://www

我正在尝试将进入我的 laravel 网站的任何请求重定向到 https://www。因为 Google Analytics 抱怨。经过大量谷歌搜索和重新搜索后,我的 .htaccess 文件如下所示。 (我的网站 运行 位于弹性负载均衡器后面的 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 ^(.*)/$ / [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,这样他们就不会得到太多的重定向?

谢谢

如果您使用的是 AWS,并且您制定了安全规则,例如所有 https 请求命中 ELB 和简单 http 中的 ELB 请求实例。所以这可能是这种情况,ELB 将 https 请求转换为 http。请先检查您的安全规则,确定它们不是原因?

我终于找到了解决办法。我使用 X-Forwarder-Proto header 来检查 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]