2008-08-06 14 views
18

W aplikacji, która mocno polega na .htaccess RewriteRules dla jego PrettyURLs (CakePHP w moim przypadku), w jaki sposób poprawnie skonfigurować dyrektywy, aby wykluczyć niektóre katalogi z tego przepisywania? Czyli:.htaccess dyrektywy na * nie * przekierowują niektóre adresy URL

/appRoot/.htaccess 
     app/ 
     static/ 

Domyślnie każde żądanie /appRoot/* jest przepisany być odebrany przez app/webroot/index.php, gdzie jest analizowane i odpowiednie działania regulatora są powoływane. Odbywa się to przez tych dyrektyw w .htaccess:

RewriteBase /appRoot 

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

I teraz chcesz wykluczyć kilka katalogów jak statyczne/z tego przepisywania. Próbowałem z tym przed z RewriteRules Ciasto:

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

Działa on tak daleko, że wnioski nie przepisywane są, ale teraz wszystkie wnioski są pomijane, nawet słusznych żądań placek który nie powinien pasować ^(static|otherDir).*$.

Próbowałem kilku odmian tych zasad, ale nie mogę go uruchomić tak, jak chcę.

Odpowiedz

6

A prawidłowa odpowiedź 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] 

ja nadal nie rozumiem, dlaczego plik index.php w głównym katalogu nazwano początkowo nawet z tymi dyrektywami w miejscu. Teraz znajduje się on pod numerem

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

i jest obsługiwany również za pomocą Cake. Mając to teraz na miejscu, przypuszczam, że to też by działało (nieznacznie zmieniona wersja sugestii Mike'a, nietestowana):

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

Zdjąć [L] od poprzednich zasad:

RewriteBase /appRoot 

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

[L] oznacza „zatrzymać proces przepisywania tutaj i nie stosuje się żadnych reguł więcej nowych tekstów.”

1

mógłbyś nie stosuje się warunku z następującymi zasadami, ale z negacji, jak w (niektóre jego odmiany, nie jestem zbyt dobry w pamiętając .htaccess zasady, więc flagi może być źle):

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

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