PhalconPHP + .htaccess:如何强制https

时间:2017-01-09 18:50:12

标签: .htaccess amazon-web-services mod-rewrite phalcon elastic-load-balancer

我在使用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>

/ public .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>

我已按照this post上的说明将此添加到这些文件中,并获得了ERR_TOO_MANY_REDIRECTS。

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

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

更新: 我想这是来自AWS的负载均衡器的问题。这是我的配置:带有负载均衡器的EC2实例(使用SSL证书),然后在我的Route53中指向此负载均衡器。我在this post中尝试了答案,但仍无效。

2 个答案:

答案 0 :(得分:1)

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

这是 root 文件夹中的.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>

答案 1 :(得分:1)

Nikolay的回答是正确的,但问题还是其他问题:AWS Load Balancer的问题。所以,这是我目前的根.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>

亚马逊的文章here