Vă mulțumim pentru susținere

.htaccess directivele * nu * redirecționează anumite adrese URL

Într-o aplicație care se bazează în mare măsură pe .htaccess RewriteRules pentru PrettyURLs (CakePHP în cazul meu), cum pot crea directive directe pentru a exclude anumite directoare de la această rescriere? Acesta este:

/appRoot/.htaccess
         app/
         static/

În mod implicit, fiecare cerere de / appRoot / * este rescrisă pentru a fi preluată de app / webroot / index.php , unde este analizată și se invocă acțiunile controlerului corespunzător . Acest lucru se face prin aceste directive în .htaccess :

RewriteBase /appRoot

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

Vreau acum să exclud câteva directoare ca static / din această rescriere. Am incercat cu inainte trusa de rewrite tort:

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

Funcționează în măsura în care solicitările nu mai sunt rescrise, însă cererile toate sunt ignorate, chiar și cererile legitime ale Tortului, care nu ar trebui să se potrivească ^ (static | otherdir). >.

Am incercat mai multe variante ale acestor reguli, dar nu pot sa o fac sa functioneze asa cum imi doresc.

0
adăugat editat

3 răspunsuri

Eliminați [L] de regulile precedente:

RewriteBase /appRoot

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

[L] înseamnă "Opriți procesul de rescriere aici și nu mai aplicați alte reguli de rescriere".

0
adăugat

Și răspunsul corect 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]

Încă nu înțeleg de ce fișierul index.php din directorul rădăcină a fost numit inițial chiar și cu aceste directive în vigoare. Se află acum în

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

și s-au purtat și prin tort. Cu acest lucru în prezent, cred că ar fi funcționat și ea (versiunea puțin modificată a sugestiei lui Mike, netestată):

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

Ați putea să nu aplicați condiția la următoarele reguli, dar cu negare, ca și în (cu unele variante ale acesteia, nu sunt prea bun la amintirea regulilor .htaccess, deci steagurile ar putea fi greșite):

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

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