PhalconPHP + .htaccess: как заставить https

Я настроил HTTPS на веб-сайте, созданном с помощью Phalcon PHP. Теперь я хочу перенаправить любой запрос, сделанный с 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>

Я выполнил инструкции в этом сообщении и добавил это в эти файлы, и я получаю ERR_TOO_MANY_REDIRECTS.

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

Можете ли вы помочь мне понять, что я делаю неправильно?
Спасибо за любую помощь.

ОБНОВЛЕНИЕ: я думаю, это проблема с балансировщиком нагрузки от AWS. Это моя конфигурация: экземпляр EC2 с балансировщиком нагрузки (с использованием SSL-сертификата), затем в моем Route53 я указываю на этот балансировщик нагрузки. Я попробовал ответы в этом post и все еще не работает.


person André Luiz    schedule 09.01.2017    source источник


Ответы (2)


Перенаправление HTTPS или любые другие перенаправления должны идти перед правилом Phalcon в вашем файле .htaccess.

Это мой файл .htaccess в папке root:

<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>
person Nikolay Mihaylov    schedule 09.01.2017
comment
Спасибо за ответы. Ваш .htaccess должен работать, но по какой-то причине он не работает на моем сервере. Ваш код проходит тест на htaccess.mwl.be, но на моем сервере возникает ошибка 503. Я пытаюсь что-то исправить. Я отпишусь здесь, когда найду проблему, это должна быть небольшая деталь - person André Luiz; 09.01.2017

Ответ Николая правильный, но проблема была в другом: проблема с 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>

Статья Amazon здесь.

person André Luiz    schedule 10.01.2017