J'ai besoin de 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?
J'ai besoin de 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?
Réponses:
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 !-l
chemin est la condition que la demande ne concerne pas un lien ( !
signifie non, -l
signifie 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=$1
ce qui signifie qu'une demande olle
sera réécrite comme 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éé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.
?
à &
, ce qui rend impossible de faire la distinction entre les /page&foobar
vs /page?foobar
. Comment puis-je empêcher QSA de remplacer ?
en &
?
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]
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