【问题标题】:AWS ELB Redirect HTTP to HTTPS without index.php没有 index.php 的 AWS ELB 将 HTTP 重定向到 HTTPS
【发布时间】: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

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

【问题讨论】:

    标签: .htaccess amazon-web-services ssl amazon-elastic-beanstalk amazon-elb


    【解决方案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]
      

      【讨论】: