Quelle est la différence entre $ {var} et% {var} dans httpd.conf?
À peu près tout. Il n'y a pas de règle stricte qui dit " $
fait x, %
fait y", car ils font des choses différentes selon l'endroit et la façon dont ils sont utilisés.
$ {VAR} sera-t-il utilisé partout dans httpd.conf, sauf dans la directive mod_rewrite
Non - ${VAR}
est appliqué en remplacement à chaque emplacement de la configuration, même dans une ligne liée à mod_rewrite. Ceux-ci ne peuvent être définis qu'au démarrage à l'aide de l' -D
option passée au binaire httpd ou de la Define
directive.
Cela peut être fait car ces variables ne doivent pas contenir de :
caractère, tandis que l' RewriteMap
utilisation doit contenir un :
caractère. Cela permet d' $
utiliser le de manière extrêmement différente sans conflit - l'analyseur voit le :
et sait qu'il n'est pas censé le remplacer.
Une variable définie dans httpd.conf à l'aide de la directive SetEnvIf, pour une utilisation dans le même httpd.conf, serait-elle utilisée comme $ {var} sauf lorsque la variable est utilisée avec les directives mod_rewrite, où la variable serait utilisée comme% {var}?
Non. Les variables d'environnement ne sont pas les mêmes que les variables définies via -D
ou Define
- elles sont un contexte par demande complètement séparé (ce sont celles avec SetEnvIf
lesquelles vous définissez ), que seules certaines directives utiliseront. Ils sont spécifiquement mentionnés là où ils sont pris en charge - dans mod_rewrite, ils le sont %{ENV:variable}
, dans les journaux, ils sont %{variable}e
, et beaucoup de directives ont une vérification logique qui ressemble env=variable
.
Donc en gros; c'est un désordre déroutant - un témoignage de l'histoire du serveur Web au cours des deux dernières décennies. La principale chose qui vous prête à confusion est probablement que la syntaxe de mod_rewrite ne s'étend à aucune autre partie de la configuration; c'est tout différent. Le principal point à retenir de tout cela est qu'il n'y a pas de «règle» gouvernante pour donner un sens à tout cela - un $
dans un endroit signifie quelque chose de complètement différent d'un $
dans un autre endroit.
Quelques points de référence pratiques:
- Si vous cherchez à définir une variable statiquement au démarrage d'Apache, utilisez
Define
et ${VAR}
à remplacer une fois, au démarrage d'Apache. Ceci est surtout utile lorsque vous voulez faire quelque chose comme partager des fichiers de configuration entre un environnement de développement et de production - mais cela ne doit pas être confondu avec l'utilisation de $
from RewriteMap
, qui contient toujours un :
.
- Si vous cherchez à travailler avec des variables dans des demandes spécifiques, les variables d'environnement sont ce que vous recherchez - mais vous ne pouvez pas faire d'hypothèses sur la syntaxe que vous utiliserez pour les atteindre lorsqu'elles sont utilisées avec une directive spécifique. Vous devrez vérifier la documentation de cette directive.
- Lorsque mod_rewrite est en question, jetez tout ce que vous pensiez savoir sur les variables et leur syntaxe. Il possède son propre ensemble de variables
%{VAR}
, vous pouvez accéder à vos variables d'environnement «normales» avec %{ENV:VAR}
et vous pouvez définir des variables d'environnement avec [E=VAR]
.