2008-08-06 11 views
18

In einer Anwendung, die stark auf .htaccess RewriteRules für seine PrettyURLs (CakePHP in meinem Fall) beruht, wie richte ich richtig Anweisungen aus, bestimmte Verzeichnisse von diesem Umschreiben auszuschließen? Das heißt:.htaccess Direktiven zu * not * Umleiten bestimmter URLs

/appRoot/.htaccess 
     app/ 
     static/ 

standardmäßig jede Anforderung an /appRoot/* neu geschrieben wird von app/webroot/index.php abgeholt werden, wo sie analysiert und entsprechende Controller-Aktionen aufgerufen werden. Dies wird durch diese Richtlinien in .htaccess getan:

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/  [L] 
RewriteRule (.*) app/webroot/$1 [L] 

ich jetzt ein paar Verzeichnisse wie statisch/von diesem Umschreiben ausschließen möchten. Ich habe versucht, dies mit vor den Kuchen RewriteRules:

RewriteCond $1 ^(static|otherDir).*$ [NC] 
RewriteRule (.*) - [L] 

Es soweit funktioniert, dass Anforderungen nicht mehr neu geschrieben, aber jetzt alle Anfragen übersprungen werden, auch legitime Kuchen-Anfragen, die nicht ^(static|otherDir).*$ übereinstimmen sollte.

Ich habe verschiedene Varianten dieser Regeln ausprobiert, kann sie aber nicht so ausführen, wie ich es möchte.

Antwort

6

Und die richtige Antwort iiiiis ...

RewriteRule ^(a|bunch|of|old|directories).* - [NC,L] 

# all other requests will be forwarded to Cake 
RewriteRule ^$ app/webroot/ [L] 
RewriteRule (.*) app/webroot/$1 [L] 

ich noch nicht bekommen, warum die Datei index.php im root-Verzeichnis zunächst auch mit diesen Richtlinien an Ort und Stelle genannt wurde. Es ist jetzt in

/appRoot/app/views/pages/home.ctp 

und auch über Kuchen behandelt. Mit diesem jetzt, ich nehme an, das würde auch gut funktioniert haben (leicht veränderte Version von Mikes Vorschlag, ungetestet):

RewriteCond $1  !^(a|bunch|of|old|directories).*$ [NC] 
RewriteRule ^(.*)$ app/webroot/$1 [L] 
1

Entfernen Sie die [L] von den bisherigen Regeln:

RewriteBase /appRoot 

RewriteRule ^$ app/webroot/     
RewriteRule (.*) app/webroot/$1 

[L] bedeutet „Stoppen Sie den Umschreiben hier Prozess und keine weiteren Umschreiben Regeln gelten.“

1

Könnten Sie den Zustand die folgenden Regeln nicht gelten, aber mit Negation, wie in (mit einigen Variationen davon, ich bin nicht so gut an .htaccess Regeln zu erinnern, so könnten die Fahnen falsch sein):

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/ [L] 

RewriteCond $1 !^(static|otherDir).*$ [NC] 
RewriteRule ^$ app/webroot/$1 [L]