Que signifie $ 1 [QSA, L] dans mon fichier .htaccess?

Réponses:

215

Pas l'endroit pour donner un tutoriel complet, mais le voici en bref;

RewriteCond signifie essentiellement "exécuter la prochaine RewriteRule uniquement si c'est vrai". Le !-lchemin est la condition que la demande ne concerne pas un lien ( !signifie non, -lsignifie lien)

Le RewriteRule signifie essentiellement que si la demande est faite qui correspond ^(.+)$(correspond à n'importe quelle URL sauf la racine du serveur), elle sera réécrite comme index.php?url=$1ce qui signifie qu'une demande ollesera réécrite comme index.php?url=olle).

QSAsignifie que si une chaîne de requête est passée avec l'URL d'origine, elle sera ajoutée à la réécriture ( olle?p=1sera réécrite comme index.php?url=olle&p=1.

L signifie que si la règle correspond, ne traitez plus les RewriteRules en dessous de celle-ci.

Pour plus d'informations à ce sujet, suivez les liens ci-dessus. La prise en charge de la réécriture peut être un peu difficile à comprendre, mais il existe de nombreux exemples sur stackoverflow pour apprendre.

Joachim Isaksson
la source
QSA remplace ?à &, ce qui rend impossible de faire la distinction entre les /page&foobarvs /page?foobar. Comment puis-je empêcher QSA de remplacer ?en &?
Pacerier
8

Si les conditions suivantes sont remplies, réécrivez l'URL:
Si le nom de fichier demandé n'est pas un répertoire,

RewriteCond %{REQUEST_FILENAME} !-d

et si le nom de fichier demandé n'est pas un fichier régulier qui existe,

RewriteCond %{REQUEST_FILENAME} !-f

et si le nom de fichier demandé n'est pas un lien symbolique,

RewriteCond %{REQUEST_FILENAME} !-l

puis réécrivez l'URL de la manière suivante:
prenez le nom de fichier de la requête entière et indiquez-le comme valeur d'un paramètre de requête "url" à index.php. Ajoutez toute chaîne de requête de l'URL d'origine en tant que paramètres de requête supplémentaires (QSA) et arrêtez de traiter ce fichier .htaccess (L).

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Documents Apache #flag_qsa

Un autre exemple:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

Avec l'indicateur [QSA], une demande de

/ pages / 123? un = deux

sera mappé à

/page.php?page=123&one=two

antelove
la source
0

Cette capture les demandes de fichiers tels que version, releaseet README.md, etc. , qui doivent être traités comme des points d' extrémité, si elle est définie (comme dans le cas de / libération), ou « non trouvé. »

Pyae Sone
la source