Forzar SSL / HTTPS con mod_rewrite

Tengo una aplicación de Zend Framework que deseo incorporar a 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.

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 tu ayuda!

Coloque esta regla antes de sus reglas actuales:

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

Encontré una solución que funciona bien para servidores proxy y no proxy.

Si está utilizando CloudFlare, AWS Elastic Load Balancing, Heroku, OpenShift o cualquier otra solución Cloud / PaaS y está experimentando ciclos de redirección con redirecciones HTTPS normales, intente con el siguiente fragmento.

 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 

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] 
 RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^.*$ https://mydomain.com/\0 [L,QSA,R=301]