没有 index.php 的 AWS ELB 将 HTTP 重定向到 HTTPS

Posted

技术标签:

【中文标题】没有 index.php 的 AWS ELB 将 HTTP 重定向到 HTTPS【英文标题】:AWS ELB Redirect HTTP to HTTPS without index.php 【发布时间】:2018-04-15 15:08:15 【问题描述】:

我正在使用 AWS Elastic Beanstalk 通过负载均衡器在一些 EC2 实例上托管我的网站。

我正在使用 OctoberCMS(一种类似 laravel 的框架)

我已通过 AWS Certificate Manager 在我的 ELB 上设置 SSL 证书,一切正常。

但是有一个问题。

我想将 HTTP 重定向到 HTTPS。

根据 AWS,我有一个小的 .htaccess sn-p 来完成这项工作:

Redirect to HTTPS
RewriteCond %HTTP:X-Forwarded-Proto =http
RewriteRule . https://%HTTP:Host%REQUEST_URI [L,R=permanent]

但是,当用户访问http://mywebsitesite.com 时,它会将他们带到https://mywebsitesite.com/index.php,因此他们开始以https://mywebsitesite.com/index.php/someresource 的方式浏览。

此外,如果您转到http://mywebsitesite.com/someresource,您将被重定向回https://mywebsitesite.com/index.php

这不是一个好的体验,我知道之前一定有人遇到过这种情况并且能够正确重定向到资源并删除 index.php

我的 ELB 监听器默认配置为 80 --> 80 和 443 --> 80

注意:我没有遇到重定向循环。

【问题讨论】:

【参考方案1】:

我会在这个答案的开头说这是来自 Tomcat Elastic Beanstalk 的代码,但我相信它应该仍然可以工作。

我的配置代码文件中有:

RewriteEngine On
RewriteCond %HTTP:X-Forwarded-Proto !https
RewriteRule ^(.*)$ https://%HTTP_HOST$1 [R,L]

这是配置 Apache 代理的 .ebextensions 文件的一部分,在我的例子中,它位于 Tomcat 之前。

【讨论】:

【参考方案2】:

您可以在 .htaccess 中添加以下行,以在重定向配置后从 url 中隐藏 index.php。

RewriteRule ^(.*)$ /index.php?/$1 [L]

【讨论】:

以上是关于没有 index.php 的 AWS ELB 将 HTTP 重定向到 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

直接将 AWS ELB 与 Gunicorn 一起使用(没有 nginx)有啥缺点?

将 aws ELB 用于另一个托管实例

如何将 AWS ELB 连接到运行 MS SQL 的 RDS?

如何在自动缩放组中添加 aws new elb

我可以使用 AWS 自己的 ELB 证书进行 HTTPS/SSL 连接吗?

如何让 AWS ELB 将实际主机名而不是 ELB 的主机名转发到目标组?