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 ?
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 ?
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.
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 &
?
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
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.
4 votes
Lisez ceci : httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa
0 votes
stackoverflow.com/questions/60463906/