102 votes

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

Je dois changer mon .htaccess et il y a deux lignes que je ne comprends pas.

RewriteCond %{REQUEST_FILENAME} !-l

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

Quand dois-je utiliser ces lignes ?

4 votes

0 votes

224voto

Joachim Isaksson Points 85969

Ce n'est pas l'endroit pour donner un tutoriel complet, mais le voici en bref ;

RewriteCond signifie essentiellement "n'exécuter la prochaine RewriteRule que si ceci est vrai". Le site !-l est la condition que la demande ne porte pas sur un lien ( ! signifie non, -l lien moyen)

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

QSA signifie 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=1 sera réécrit comme suit index.php?url=olle&p=1 .

L signifie que si la règle correspond, il ne faut pas traiter d'autres RewriteRules en dessous de celle-ci.

Pour des informations plus complètes à ce sujet, suivez les liens ci-dessus. La prise en charge de la réécriture peut être un peu difficile à appréhender, mais il y a pas mal d'exemples sur stackoverflow pour apprendre.

0 votes

QSA remplace ? a & Il est donc impossible de faire la distinction entre /page&foobar vs /page?foobar . Comment puis-je empêcher QSA de remplacer ? a & ?

2 votes

Je crois que pour se souvenir de toutes ces choses vous pouvez faire une association comme : QSA est l'abréviation de Query String Append ; L signifie dernier (signifie exécuter et arrêter de chercher la prochaine coïncidence)

9voto

antelove Points 617

Si les conditions suivantes sont vraies, 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éécrire l'URL de la manière suivante :
Prenez le nom de fichier complet de la requête et fournissez-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ètre de requête supplémentaire (QSA), et arrêtez le traitement de ce fichier .htaccess (L).

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

Documentation Apache #flag_qsa

Un autre exemple :

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

Avec le drapeau [QSA], une demande d'accès à l'information sur l'état de santé de l'utilisateur peut être faite.

/pages/123?one=two

sera mis en correspondance avec

/page.php?page=123&un=deux

0voto

Pyae Sone Points 274

Cela permettra de capturer les demandes de fichiers comme version , release y README.md etc. qui doivent être être traités soit comme des points de terminaison, s'ils sont définis cas de /release), soit comme "non trouvé".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X