2009-04-07 3 views
1

Ich versuche, apache2's mod_rewrite zu verwenden, um SSL-Verbindungen zu einer Website zu erzwingen. Bisher funktioniert es gut mit den folgenden in der <VirtualHost> Eintrag Website:Force Umleitung auf SSL für alle Seiten abgesehen von einem

RewriteEngine On 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,NC,R,L] 

Dieses gut funktioniert und leitet alles, was ist das, was ich wollte.

Es gibt jedoch eine bestimmte Seite auf der Website, die das Google Maps-API verwendet, das nicht über SSL verfügbar ist und daher Warnmeldungen zu gemischten Inhalten im Browser auslöst. Daher möchte ich, dass diese eine reine Kartenseite nicht umgeleitet wird und die normale Nicht-ssl-Verbindung verwendet.

Die URL, für die ich kein SSL möchte, hat die Form /thing/add/{ID}/page3, wobei {ID} ein numerischer Wert ist.

Ist das möglich?

Antwort

2
RewriteEngine On 

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^thing/add/\d+/page3$ - [L] 

RewriteCond %{SERVER_PORT} ^443$ 
RewriteRule ^(thing/add/\d+/page3) $ http://%{HTTP_HOST}/$1 [QSA,NC,R,L] 

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,NC,R,L] 

Die Regeln werden von oben nach unten verarbeitet; der erste hört auf, die Kartenseite neu zu schreiben, wenn nicht auf SSL; Die zweite Option (optional) leitet diese Seiten bei Verwendung von SSL auf nicht sicher um. Für alles andere gilt die alte Regel.

+0

Funktioniert perfekt. Danke :) –

+0

Gern geschehen. Sie könnten% {HTTPS} ^. + $ Anstelle der% {SERVER_PORT} Regex verwenden (da% {HTTPS} bei SSL "on" sein soll, sonst nicht definiert; dann wären Sie portnummernunabhängig), aber ich hatte Probleme damit. – Piskvor

Verwandte Themen