.htaccess-Richtlinien zu *nicht* bestimmte URLs umleiten
-
08-06-2019 - |
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.
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."