2009-08-25 8 views
23

J'ai une application Zend Framework que je veux forcer dans HTTPS en utilisant mod_rewrite. Je suis assez perdu quand il s'agit de mod_rewrite. Voici mon fichier .htaccess actuel à la racine de mon application.Force SSL/HTTPS avec 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 

Quelle est la meilleure façon de forcer l'application en HTTPS en fonction de ce que j'ai? J'ai essayé quelques exemples que j'ai trouvés ici, mais je continue d'obtenir des boucles de redirection ou des erreurs internes de serveur quand je les essaye.

Merci pour votre aide!

+0

La question n'a rien à voir avec Zend Framework. Beaucoup induire en erreur lorsque vous recherchez une solution zend sur google. Devrait être renommé "encore une autre question mod_rewrite" – DanFromGermany

Répondre

2

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

Mettre cette règle avant vos règles actuelles:

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

Le point à noter ici est "Mettez cette règle avant vos règles actuelles". Faites-en la première règle. Mon site a eu plusieurs règles de redirection et de faire cette règle comme le premier a fait l'affaire. –

5

que je recherchais cette solution ainsi. J'ai ajouté les solutions de Gumbo et cela a très bien fonctionné pour moi. Mais mon original était différent. Mon site/réécriture de l'application redirige tout via index.php (pour les URLs fany et ../application) à l'exception des fichiers que vous demandez spécifiquement. (comme une image ou d'autres fichiers statiques dans la racine publique) Voici mon original, que j'ai trouvé sur le site ZF il y a longtemps.

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

Voici les règles supplémentaires de Gumbo pour forcer SSL sur l'ensemble du site. Jusqu'à présent fonctionne bien pour moi.

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

Alors que la solution de Gumbo fonctionne très bien pour votre serveur web Apache moyenne, j'ai connu rediriger les boucles sur les serveurs derrière les proxies (par exemple des sites CloudFlare'd ou OpenShift). La solution suivante fonctionne bien pour les serveurs proxy et non-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

Défini +1 pour cette réponse lors de l'utilisation de Cloudflare flexible SSL; toutes les autres solutions semblent créer des boucles de redirection – BellamyStudio

+0

Travaillé sur un site wordpress où seule la page d'accueil forçait https alors que pour les autres pages http était autorisé. Note: J'ai dû mettre ce code AVANT le '# BEGIN WordPress' dans .htaccess pour le faire fonctionner. – nikhilvj

+1

Utilisé pour Heroku. Cool! –