2009-08-25 28 views
23

Tengo una aplicación de Zend Framework que quiero forzar en HTTPS utilizando mod_rewrite. Estoy bastante perdido cuando se trata de mod_rewrite. Aquí está mi archivo .htaccess actual en la raíz de mi aplicación.Forzar SSL/HTTPS con 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 

¿Cuál es la mejor manera de forzar la aplicación en HTTPS en función de lo que tengo? He intentado algunos de los ejemplos que encontré aquí, pero sigo obteniendo bucles de redireccionamiento o errores internos del servidor cuando los pruebo.

Gracias por su ayuda!

+0

La pregunta no tiene nada que ver con Zend Framework. Gran cantidad de errores cuando busca una solución zend en google. Debería renombrarse como "otra pregunta mod_rewrite" – DanFromGermany

Respuesta

2

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

Deja esta regla antes de que sus normas actuales:

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

El punto a tener en cuenta aquí es "Pon esta regla antes que tus reglas actuales". Haga esto como la primera regla. Mi sitio estaba teniendo varias reglas de redireccionamiento y haciendo esta regla ya que el primero hizo el truco. –

5

que estaba buscando esta solución también. Agregué las soluciones de Gumbo y me funcionó muy bien. Pero mi original era diferente. La reescritura de mi sitio/aplicación redirige todo a través de index.php (para fany urls y ../application) excepto para los archivos que solicita específicamente. (como una imagen u otros archivos estáticos en la raíz pública) Aquí está mi original, que encontré en el sitio de ZF hace mucho tiempo.

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

Aquí está con las reglas adicionales de Gumbo para forzar SSL en todo el sitio. Hasta ahora funciona bien para mí.

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

Mientras que la solución de Gumbo funciona bien para su servidor web Apache promedio, que experimentaron redirigir bucles en los servidores detrás de proxies (por ejemplo, Sitios CloudFlare'd o OpenShift). La siguiente solución funciona bien para los servidores proxy y sin proxy:

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

Definite +1 para esta respuesta cuando se usa Cloudflare flexible SSL; todas las demás soluciones parecen crear bucles de redirección – BellamyStudio

+0

Trabajó en un sitio de wordpress donde solo la página de inicio forzaba https, mientras que para otras páginas se permitía http. Nota: tuve que poner este código ANTES de '# BEGIN WordPress' en .htaccess para que funcione. – nikhilvj

+1

Utilizado esto para Heroku. ¡Guay! –