2009-08-25 16 views
23

Ich habe eine Zend Framework-Anwendung, die ich mit mod_rewrite in HTTPS erzwingen möchte. Ich bin ziemlich verloren, wenn es um Mod_rewrite geht. Hier ist meine aktuelle .htaccess-Datei im Stamm meiner Anwendung.Erzwinge SSL/HTTPS mit mod_rewrite

Was ist der beste Weg, um die Anwendung in HTTPS basierend auf was ich habe zwingen? Ich habe ein paar der Beispiele ausprobiert, die ich hier gefunden habe, aber ich bekomme immer wieder Umleitungsschleifen oder interne Serverfehler, wenn ich sie versuche.

Danke für Ihre Hilfe!

+0

Frage hat nichts mit Zend Framework zu tun. Viel irreführend, wenn Sie auf Google nach einer Zend-Lösung suchen. Sollte umbenannt werden in "Noch eine Mod_rewrite-Frage" – DanFromGermany

Antwort

2

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

Setzen Sie diese Regel vor Ihrer aktuellen Regeln:

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

Der Punkt zu beachten ist hier "Setzen Sie diese Regel vor Ihre aktuellen Regeln". Machen Sie dies als erste Regel. Meine Site hatte mehrere Redirect-Regeln und machte diese Regel als die erste, die den Trick machte. –

5

Ich war auch für diese Lösung suchen. Ich fügte die Lösungen von Gumbo hinzu und es funktionierte großartig für mich. Aber mein Original war anders. Meine Website/App Neuschreiben leitet alles über index.php (für fany URLs und ../application) mit Ausnahme von Dateien, die Sie speziell anfordern. (wie ein Bild oder andere statische Dateien in der öffentlichen Wurzel) Hier ist mein Original, das ich vor langer Zeit von der ZF-Seite gefunden habe.

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

Hier ist mit Gumbo zusätzliche Regeln, um SSL auf der gesamten Website zu erzwingen. Bis jetzt funktioniert das gut für mich.

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

Während Gumbo-Lösung arbeitet für den durchschnittlichen Apache Web-Server in Ordnung, erfahrene ich hinter Proxies Schleifen auf Servern umleiten (z CloudFlare'd Websites oder Openshift). Die folgende Lösung eignet sich sowohl für Proxyserver als auch für unproxi- zierte Server:

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

Definitiv +1 für diese Antwort bei Verwendung von Cloudflare flexible SSL; alle anderen Lösungen scheinen Umleitungsschleifen zu erstellen – BellamyStudio

+0

Arbeitete auf einer Wordpress-Site, wo nur die Homepage https zwang, während für andere Seiten http erlaubt wurde. Hinweis: Ich musste diesen Code VOR dem '# BEGIN WordPress' in .htaccess setzen, um es zum Laufen zu bringen. – nikhilvj

+1

Verwendet für Heroku. Cool! –