2009-08-25 5 views
23

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

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 на основе того, что у меня есть? Я попробовал пару примеров, которые я нашел здесь, но я продолжаю получать циклы перенаправления или внутренние ошибки сервера, когда я их пробую.

Благодарим за помощь!

+0

Вопрос не имеет отношения к Zend Framework. Многое вводит в заблуждение при поиске решения zend в google. Должен быть переименован в «еще один mod_rewrite вопрос» – DanFromGermany

ответ

2

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

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

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

Пункт, который следует отметить здесь: «Поместите это правило перед вашими текущими правилами». Сделайте это первым правилом. На моем сайте было несколько правил переадресации, и это правило было правильным, поскольку первый из них сделал трюк. –

5

Я искал для этого решения, а также. Я добавил решения 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] 
24

Хотя решение илистый прекрасно для среднего веб-сервера Apache работает, я испытал переориентировать петли на серверах за прокси (например, сайты CloudFlare'd или OpenShift). Следующее решение хорошо работает как для прокси, так и для непропитанных серверов:

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 
+4

Определенный +1 для этого ответа при использовании Cloudflare flexible SSL; все другие решения, похоже, создают петли перенаправления. – BellamyStudio

+0

Работал на сайте wordpress, где только домашняя страница заставляла https, а для других страниц http была разрешена. Примечание. Мне пришлось поставить этот код перед '# BEGIN WordPress' в .htaccess, чтобы заставить его работать. – nikhilvj

+1

Используется для Heroku. Круто! –

Смежные вопросы