Devo cambiare il mio .htaccess
e ci sono due righe che non capisco.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Quando dovrei usare queste linee?
Devo cambiare il mio .htaccess
e ci sono due righe che non capisco.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Quando dovrei usare queste linee?
Risposte:
Non è il posto giusto per dare un tutorial completo, ma eccolo qui in breve;
RewriteCond significa fondamentalmente "eseguire la prossima RewriteRule solo se questo è vero". Il !-l
percorso è la condizione che la richiesta non sia per un collegamento ( !
significa no, -l
significa collegamento)
La RewriteRule significa fondamentalmente che se la richiesta viene eseguita che corrisponde ^(.+)$
(corrisponde a qualsiasi URL tranne la radice del server), verrà riscritta, il index.php?url=$1
che significa che una richiesta per olle
verrà riscritta come index.php?url=olle
).
QSA
significa che se c'è una stringa di query passata con l'URL originale, verrà aggiunta alla riscrittura ( olle?p=1
verrà riscritta come index.php?url=olle&p=1
.
L
significa che se la regola corrisponde, non elaborare più RewriteRules sotto questa.
Per informazioni più complete su questo, segui i link sopra. Il supporto per la riscrittura può essere un po 'difficile da comprendere, ma ci sono alcuni esempi su StackOverflow da cui imparare.
?
a &
, rendendo impossibile distinguere tra /page&foobar
vs /page?foobar
. Come posso impedire a QSA di sostituire ?
a &
?
Se le seguenti condizioni sono vere, riscrivi l'URL:
Se il nome del file richiesto non è una directory,
RewriteCond %{REQUEST_FILENAME} !-d
e se il nome file richiesto non è un file normale esistente,
RewriteCond %{REQUEST_FILENAME} !-f
e se il nome del file richiesto non è un collegamento simbolico,
RewriteCond %{REQUEST_FILENAME} !-l
quindi riscrivi l'URL nel modo seguente:
prendi l'intero nome del file della richiesta e forniscilo come valore di un parametro di query "url" a index.php. Aggiungi qualsiasi stringa di query dall'URL originale come ulteriori parametri di query (QSA) e interrompi l'elaborazione di questo file .htaccess (L).
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Un altro esempio:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
Con il flag [QSA], una richiesta di
/ pagine / 123? uno = due
sarà mappato a
/page.php?page=123&one=two