2 votes

Comprendre ... RewriteCond foo#%{ENV:bar} ^([^#]+)# \1 $

J'essaie de comprendre ce que fait exactement cette condition de réécriture :

RewriteCond foo#%{ENV:bar} ^([^#]+)#\1$

Comme indiqué dans "Utiliser des variables d'environnement personnalisées dans .htaccess" cela pourrait être utilisé comme solution de rechange pour tester les variables d'environnement dans une condition de réécriture - par exemple, que "foo" est égal à la valeur de bar.

EDIT :

Merci @miah d'avoir indiqué ce que fait la regex. Bien que je ne comprenne toujours pas pourquoi la variable peut être testée de cette manière, alors qu'elle ne pourrait pas être testée directement.

UPDATE :

Ainsi, lorsque CondPattern n'évalue pas la variable et qu'elle est évaluée dans la TestString, pourquoi cela ne fonctionne-t-il pas en comparaison puisque la barre est vide ici :

RewriteCond %{ENV:bar} ^foo$

1voto

miah Points 1790

La partie intelligente ici est que \1 vous permet de faire référence à un groupe de capture antérieur dans votre regex.

  1. ^ - à partir du début de la chaîne de caractères que vous vérifiez (dans ce cas-ci foo#%{ENV:bar} )
  2. ( - démarrer le groupe de capture
  3. [^#]+ - 1 ou plusieurs caractères qui ne sont pas un #
  4. ) - groupe de capture final
  5. # - le caractère #
  6. \1 - le groupe de capture de la ligne 2-3
  7. $ - la fin de la chaîne.

Mise à jour

Le problème est que la partie CondPattern de RewriteCond n'évalue pas les variables d'environnement, et qu'elle doit être une expression régulière compatible avec Perl, ou une chaîne de caractères.

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