0

我在使用 Phalcon PHP 制作的网站中配置了 HTTPS。现在我想将对 HTTP 的任何请求重定向到 HTTPS。服务器是 AWS EC2,带有负载均衡器。

Phalcon PHP 有两个 .htaccess 文件:

/ .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule  ^$ public/    [L]
    RewriteRule  (.*) public/$1 [L]
</IfModule>

/公共.htaccess

AddDefaultCharset UTF-8

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

我已按照这篇文章的说明将其添加到这些文件中,我得到了 ERR_TOO_MANY_REDIRECTS 。

# force HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

你能帮我弄清楚我在这里做错了什么吗?
谢谢你的帮助。

更新:我猜这是 AWS 的负载均衡器的问题。这是我的配置:一个带有负载均衡器的 EC2 实例(使用 SSL 证书),然后在我的 Route53 中我指向这个负载均衡器。我尝试了这篇文章中的答案,但仍然无法正常工作。

4

2 回答 2

1

HTTPS 重定向或任何其他重定向应位于 .htaccess 文件中的 Phalcon 规则之前。

这是我在根文件夹中的 .htaccess 文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Force HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    # Force www
    RewriteCond %{HTTP_HOST} !^$
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    # Forward to /public/ folder
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
于 2017-01-09T19:42:28.793 回答
1

Nikolay 的回答是正确的,但问题出在其他问题上:AWS 负载均衡器的问题。所以,这是我当前的根 .htaccess:

<IfModule mod_rewrite.c>
        RewriteEngine on

        #solves the problem with load balancer
        RewriteCond %{HTTP:X-Forwarded-Proto} =http
        RewriteRule ^$ https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

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

        RewriteRule  ^$ public/    [L]
        RewriteRule  (.*) public/$1 [L]
</IfModule>

亚马逊的文章在这里

于 2017-01-10T15:11:57.180 回答