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]