Nous avons récemment hérité d'un certain code et je suis en train de revoir le fichier .htaccess de l'un des sites. Je comprends le résultat final de la plupart des ensembles de règles de réécriture, mais je ne suis pas sûr de la syntaxe. Informations de base : CentOS 7 avec Apache 2.4, exécutant le CMS Concrete5.
Exemple 1 :
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
J'ai cru comprendre que %{HTTPS} est l'une des variables spéciales fournies par mod_rewrite et qu'elle a pour valeur soit on
o off
. Dans une règle précédente, je vois RewriteCond %{HTTPS} =on
ce qui est plus logique et va dans le sens de ce que montre la documentation. aquí . Ainsi, dans l'exemple ci-dessus, j'ai les questions suivantes :
- A quoi sert le "s" de fin dans %{HTTPS}s
- Pourquoi le modèle utilise-t-il ^on au lieu de =on. Est-ce que c'est valable ?
- Je comprends que tout ce qui est entre parenthèses peut être référencé en retour avec %1, mais son placement ici n'a pas vraiment de sens pour moi. Si %{HTTPS} doit être évalué à
on
ooff
alors le fait de placer (s)| dans le motif fera qu'il ne correspondra jamais à la condition, n'est-ce pas ? Et à quoi sert le PIPE ?
Exemple 2 :
#redirect calls to index.php without get parameters to non-www
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{THE_REQUEST} /index\.php\s [NC]
RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE]
Je ne comprends pas bien le deuxième RewriteCond.
- Quel est le
\s
à la fin du fichier index.php ?
Exemple 3 :
Enfin, nous avons
#Standard C5 pretty urls
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
Dans la RewriteRule, le modèle est le suivant .
qui, en regex, signifie "tout caractère".
- Cette règle dit-elle "Si les conditions ci-dessus sont remplies, remplacez tout caractère par index.php" ? Que fait cette règle ?