2010-07-22 4 views
16

Ich habe ein Client-Projekt, wo ich HTTPS für einen bestimmten Ordner erzwingen und HTTP für alle anderen erzwingen muss. Ich kann HTTPS erfolgreich für den Ordner durchsetzen, den ich wünsche, aber dann werden alle Links zurück zum Rest der Seite durch HTTPS geführt. Ich hätte gerne eine Regel, die Anfragen für etwas "nicht" im sicheren Ordner zwingt, zurück zu HTTP gezwungen zu werden. Hier ist, was ich bisher:Erzwinge HTTPS für bestimmte URLs und erzwinge HTTP für alle anderen.

RewriteEngine On 
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 

‚mein‘ ist der Name des Ordners, den ich brauche für HTTPS zu erzwingen.

Irgendwelche Ideen? sie jetzt zu lösen, nur um http://www.example.com/index.php/my

RewriteEngine On 
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 

# Force HTTPS for /my 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(my) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

# Force HTTP for anything which isn't /my 
RewriteCond %{HTTPS} =on 
RewriteRule !^my http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

# Remove index.php from URLs 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 

Aber statt Anfragen für/meine über HTTPS gezwungen werden:

Update: Ich habe auch versucht:?

Antwort

16

Ah natürlich. Das Problem liegt in der Tatsache, dass Ihr Umschreibungsregelsatz erneut verarbeitet wird, nachdem er nach der anfänglichen Umleitung in index.php umgewandelt wurde. Mit dem, was Sie derzeit haben, müssen Sie die Umleitungen zusätzlich konditionieren, um sicherzustellen, dass sie nach dem Umschreiben auf /index.php/my nicht angewendet werden.

etwas wie die folgenden tun soll:

RewriteEngine On 
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 

# Force HTTPS for /my 
RewriteCond %{HTTPS} !=on 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/my [NC] 
RewriteRule ^(my) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

# Force HTTP for anything which isn't /my 
RewriteCond %{HTTPS} =on 
RewriteCond %{THE_REQUEST} !^[A-Z]+\s/my [NC] 
RewriteRule !^my http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

# Remove index.php from URLs 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 
+0

Danke, rettete mir eine Menge Zeit! FWIW, in Wordpress, das grundlegende Wordpress htaccess IfModule entfernt bereits index.php von URLs. – Jason

0

invertieren Sie die Bedingungen:

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

Hallo ya, vielen Dank für die schnelle Antwort. Ich habe das versucht, aber ich war mir nicht sicher, wo ich es in den Fluss meiner bestehenden Regeln setzen sollte, irgendwelche Zeiger? Wenn ich es über die bestehende "Force HTTPS" -Regel setze, verhindert es das "Erzwingen von HTTPS" und verhindert auch die letzte Regel, die die Ausführung von index.php neu schreibt. :? –

+0

@Nathan Pitman: Nein, da sie verschiedene übereinstimmende Bedingungen haben, sollten sie nicht interagieren. – Gumbo

+0

ok, ich habe versucht, was Sie vorgeschlagen haben (siehe das Update zu meinem ursprünglichen Beitrag), aber das hat nicht funktioniert. Ich kann sehen, dass es "sollte", aber ich denke, ich habe vielleicht die Regeln in der falschen Reihenfolge oder bestimmte Regeln verursachen das Neuschreiben, bevor andere Bedingungen und Regeln ausgewertet werden können ...:/ –

1

Dies ist etwas, das von einem alten Client-Website funktioniert und könnte für Ihre Zwecke angepasst werden:

#If https off and in the cart dir 
RewriteCond %{HTTPS} =off [NC] 
RewriteCond %{REQUEST_URI} ^/cart/(.*) [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/cart/%1 [R=301,L] 

#If https on and not in cart dir  
RewriteCond %{HTTPS} =on 
RewriteCond %{REQUEST_URI} !^/cart [NC] 
#Above line actually used to read RewriteCond %{REQUEST_URI} !^/cart|media|images|thumbs|css|js [NC] 
#to allow js/css/images to be served so there were no mixed ssl messages popping up to visitors 
RewriteCond %{REQUEST_FILENAME} !index\.php$ [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

Ersetzen Warenkorb mit meinem vielleicht

4

Versuchen Sie folgendes, sollte für Sie arbeiten:

RewriteEngine On 

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} ^/my 
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^/my 
RewriteRule ^(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 
Verwandte Themen