Cosa significa $ 1 [QSA, L] nel mio file .htaccess?


Risposte:


215

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 !-lpercorso è la condizione che la richiesta non sia per un collegamento ( !significa no, -lsignifica 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=$1che significa che una richiesta per olleverrà riscritta come index.php?url=olle).

QSAsignifica che se c'è una stringa di query passata con l'URL originale, verrà aggiunta alla riscrittura ( olle?p=1verrà 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.


QSA sostituisce ?a &, rendendo impossibile distinguere tra /page&foobarvs /page?foobar. Come posso impedire a QSA di sostituire ?a &?
Pacerier

8

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]

Documenti Apache #flag_qsa

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


0

Questo catturerà le richieste di file come version, releasee README.md, ecc, che dovrebbe essere trattata come endpoint, se definito (come nel caso di / rilascio), o come "non trovato."

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.