Force SSL/HTTPS с mod_rewrite

У меня есть приложение Zend Framework, которое я хочу вставить в HTTPS с помощью mod_rewrite. Я довольно потерян, когда дело доходит до mod_rewrite. Вот мой текущий файл .htaccess в корне моего приложения.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule !\.(html|htm|php|js|ico|gif|jpg|png|css|csv)$ /subdir/index.php

Каков наилучший способ заставить приложение использовать HTTPS на основе того, что у меня есть? Я попробовал пару примеров, которые я нашел здесь, но я продолжаю получать петли перенаправления или внутренние ошибки сервера, когда я их пробую.

Спасибо за вашу помощь!

Ответ 1

Следующее решение работает как для прокси, так и для прокси серверов. Поэтому, если вы используете CloudFlare, AWS Elastic Load Balancing, Heroku, OpenShift или любое другое решение Cloud/PaaS и испытываете циклы перенаправления с обычными перенаправлениями HTTPS, попробуйте.

RewriteEngine On

# If we receive a forwarded http request from a proxy...
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]

# ...or just a plain old http request directly from the client
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on

# Redirect to https version
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Put the rest of your rewrite rules here

Ответ 2

Поместите это правило перед вашими текущими правилами:

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ответ 3

Я искал это решение. Я добавил решения Gumbo, и он отлично поработал у меня. Но мой оригинал был другим. Мой сайт/приложение переписывает перенаправляет все через index.php(для fany urls и.. /application ), за исключением файлов, которые вы запрашиваете специально. (например, изображение или другие статические файлы в общедоступном корне) Вот мой оригинал, который я давно нашел на сайте ZF.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Здесь с дополнительными правилами Gumbo для принудительного SSL на всем сайте. Пока все работает хорошо для меня.

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Ответ 4


RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.*$ https://mydomain.com/\0 [L,QSA,R=301]