Direttive .htaccess per *non* reindirizzare determinati URL
-
08-06-2019 - |
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.
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".