Frage

In einer Anwendung, die stützt sich stark auf .htaccess RewriteRules für seine PrettyURLs (CakePHP in meinem Fall), how do I correctly set up-Richtlinien zum ausschließen bestimmter Verzeichnisse aus diesem umschreiben?, Dass ist:

/appRoot/.htaccess
         app/
         static/

Standardmäßig jede Anfrage an /appRoot/* wird umgeschrieben, um abgeholt app/webroot/index.php, wo Sie analysiert und entsprechende controller-Aktionen werden aufgerufen.Dies wird durch diese Richtlinien in .htaccess:

RewriteBase /appRoot

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

Ich jetzt ausschließen möchten ein paar Verzeichnisse wie static/ von dieser Umschrift.Ich habe versucht, mit diesem bevor der Kuchen RewriteRules:

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

Es funktioniert in so weit, dass die Anfragen nicht mehr geschrieben, aber jetzt alle Anfragen, werden übersprungen, auch legitime Kuchen Anforderungen nicht entsprechen, ^(static|otherDir).*$.

Ich habe versucht, verschiedene Variationen dieser Regeln aber nicht bekommen kann es zu arbeiten, wie ich will.

War es hilfreich?

Lösung

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 verstehe immer noch nicht, warum die index.php Datei in das root-Verzeichnis genannt wurde, zunächst auch mit diesen Richtlinien.Es befindet sich jetzt in

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

und behandelt durch Kuchen als gut.Mit dieser nun, ich nehme an, es würde gearbeitet haben (leicht veränderte version von Mikes Vorschlag, ungetestet):

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

Andere Tipps

Könnten Sie nicht die Bedingung angewendet, um die folgenden Regeln, aber mit negation, wie in (mit einigen Variationen davon, ich bin nicht allzu gut in Erinnerung .htaccess-Regeln, so die flags falsch sein könnte):

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

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

Entfernen Sie die [L] aus der bisherigen Regeln:

RewriteBase /appRoot

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

[L] bedeutet "Stopp das umschreiben Prozess hier und bewerben Sie sich nicht mehr umschreiben-Regeln."

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top