Domanda

In un'applicazione che fa molto affidamento su .htaccess RewriteRules per i suoi PrettyURL (CakePHP nel mio caso), come posso impostare correttamente le direttive per escludere determinate directory da questa riscrittura?Questo è:

/appRoot/.htaccess
         app/
         static/

Per impostazione predefinita ogni richiesta a /appRoot/* viene riscritto per essere ripreso da app/webroot/index.php, dove viene analizzato e vengono richiamate le azioni del controller corrispondenti.Ciò viene fatto da queste direttive in .htaccess:

RewriteBase /appRoot

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

Ora voglio escludere alcune directory come static/ da questa riscrittura.Ho provato con questo Prima le regole di riscrittura della torta:

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

Funziona al punto che le richieste non vengono più riscritte, ma ora Tutto le richieste vengono saltate, anche le richieste di torta legittime che non dovrebbero corrispondere ^(static|otherDir).*$.

Ho provato diverse varianti di queste regole ma non riesco a farlo funzionare come desidero.

È stato utile?

Soluzione

E la risposta corretta iiii è...

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]

Continuo a non capire perché il file index.php nella directory root sia stato inizialmente chiamato anche con queste direttive in atto.Ora si trova in

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

e gestito anche tramite Cake.Con questo in atto ora, suppongo che avrebbe funzionato anche questo (versione leggermente modificata del suggerimento di Mike, non testata):

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

Altri suggerimenti

Potresti non applicare la condizione alle seguenti regole, ma con negazione, come in (con qualche variazione, non sono molto bravo a ricordare le regole .htaccess, quindi i flag potrebbero essere sbagliati):

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

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

Rimuovi la [L] dalle regole precedenti:

RewriteBase /appRoot

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

[L] significa "Interrompi qui il processo di riscrittura e non applicare altre regole di riscrittura".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top