1 votes

Quelques précisions sur la syntaxe de mod_rewrite

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 :

  1. A quoi sert le "s" de fin dans %{HTTPS}s
  2. Pourquoi le modèle utilise-t-il ^on au lieu de =on. Est-ce que c'est valable ?
  3. 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 o off 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.

  1. 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".

  1. Cette règle dit-elle "Si les conditions ci-dessus sont remplies, remplacez tout caractère par index.php" ? Que fait cette règle ?

-1voto

Tero Kilkanen Points 32968

Veuillez ignorer cette réponse, elle est fausse à bien des égards.

Exemple 1 :

Cette règle permet de transférer les connexions non-HTTP vers les connexions HTTPS. Ainsi :

  1. Le s final est pour SSL.
  2. ^on est utilisé pour vérifier "si HTTP n'est PAS actif". ^ signifie une correspondance négative.
  3. Les références avec % le signe se réfère à RewriteCond les expressions régulières. Dans ce cas, %1 fait référence à la (s) groupe de capture, et donc %1 es s lorsque HTTP n'est pas actif.

La façon dont cette RewriteRule a été écrit est un peu trop compliqué, je pense qu'il aurait pu y avoir une façon plus simple de le mettre en œuvre. Cependant, il fait ce pour quoi il a été conçu.

Exemple 2 :

  1. Le site \s correspond à un espace blanc. Ainsi, cette RewriteRule correspond à /index.php c'est-à-dire un espace après .php . Je pense que le deuxième RewriteCond fait que cette règle ne fonctionne pas du tout, à moins qu'une partie du logiciel du site Web ne génère des URL incorrectes.

Exemple 3 :

  1. Il signifie : "Si les conditions ci-dessus sont remplies, remplacez toute chaîne dans l'URL par index.php". Le site . correspond simplement à n'importe quelle chaîne de caractères, et index.php est le remplacement utilisé. Les critères de correspondance dans ce RewriteRule n'a pas besoin d'être plus spécifique, puisque toute URL inexistante est envoyée à index.php .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X