2010-10-20 12 views
8

Ich habe bei Google gescheitert und ich konnte die Antwort nicht finden hier finden. Entschuldigung, ich bin ein Newb bei Htaccess und es hat wirklich seltsame Syntax und ist so schwer zu lernen!Wie htaccess redirect basierend auf Cookie-Wert

Sie können sehen, was ich versuche, hier zu tun ...

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC] 
RewriteRule .* http://localhost/mysite/cache/$1 [R=301,L] 
RewriteRule .* http://localhost/mysite/cache/guest [R=301,L] 

ich das Caching der Seiten für jeden Benutzer für Laufdrehzahl. Ich möchte in den richtigen HTML-Cache-Ordner umleiten, wenn sie mit einem Cookie angemeldet sind, ansonsten möchte ich den Gast-Cache laden.

Jetzt geht es in eine Infi-Schleife. Wenn ich das [R = ... entfernen, dann erhalte ich internen Serverfehler.

Bitte helfen Sie !!! Danke!!!

Antwort

8

Dies funktioniert für ein Cookie wie id=1234:

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} ^id=([0-9]*)$ [NC] 
RewriteRule .* http://localhost/mysite/cache/%1 [R=301,L] 
RewriteRule .* http://localhost/mysite/cache/guest [R=301,L] 

Jetzt für Ihr Problem: Stellen Sie sicher, dass Ihre .htaccess nicht auf die Seite, die Sie neu zu schreiben gilt! Zum Beispiel, wenn Ihr .htaccess liegt in /mysite/.htaccess

wird es wieder in

http://localhost/mysite/cache/%1 

verwendet werden, die vielleicht der Grund für Ihre Endlosschleife ist. Um dies zu beheben, stellen Sie entweder sicher, dass die htaccess-Regeln nicht auf die Unterverzeichnisse angewendet werden, oder verwenden Sie ein anderes Verzeichnis für den Cache.

+0

Wo kann ich Informationen darüber finden, wie man erkennt, auf welche Unterverzeichnisse man sich bezieht? Vielen Dank. – BinaryGal

+0

Ich habe endlich eine Webseite mit der Antwort gefunden: http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html#menu0-el14 Der Trick besteht darin, ein Bindestrich "-" zu verwenden. Hier ist meine Lösung, die funktioniert: RewriteRule ^. + $ - [L] – BinaryGal

1

Hier ist die Lösung für alle anderen mit diesem Problem:

RewriteEngine on 
RewriteRule ^.+$ - [L] 
RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC] 
RewriteRule .* http://localhost/mysite/$1 [R=301,L] 
RewriteRule .* http://localhost/mysite/guest [R=301,L] 

Obwohl ich nicht das Cookie Teil noch nicht getestet haben - ich bin sicher, dass es dort viele Probleme mehr geben! Aber der Rest habe ich getestet und es funktioniert! (es geht zu Gast und geht dann nicht in den Infi-Loop, yay!)

Einen schönen Tag! 8)

+3

dachte ich würde hinzufügen, wenn Sie umleiten möchten, wenn user_id nicht vorhanden ist, tun Sie stattdessen: 'RewriteCond% {HTTP_COOKIE}! ^. * User_id = (\ d +). * $ [NC] ' –