<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
+<!-- English Revision: 1533274:1673917 (outdated) -->
<!-- French translation: Fabien Coelho -->
+<!-- Updated by Lucien Gentis -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
<summary>
- <p>Ce module permet de définir et d'utiliser des macros dans les fichiers
- de configuration Apache. Ces macros peuvent avoir des paramètres qui sont
- expansés à l'utilisation (les paramètres sont remplacés par la valeur
- passée en argument), et le résultat de la substitution est traité
- normalement.</p>
+ <p>Ce module permet d'utiliser des macros dans les fichiers de
+ configuration à l'exécution du serveur HTTP Apache afin de faciliter
+ la création de nombreux blocs de configuration similaires. Quand le
+ serveur démarre, les macros sont exécutées avec les paramètres
+ fournis, et le résultat obtenu est traité au même titre que le reste
+ du fichier de configuration.</p>
+
</summary>
-<section id="features"><title>Caractéristiques</title>
-
- Définition d'une macro :
- <ul>
- <li> dans une section <Macro> au style homogène à la
- syntaxe des fichiers de configuration Apache.</li>
- <li> l'utilisateur choisit le nom de la macro et de ses paramètres.</li>
- <li> les noms de macro sont insensibles à la casse, comme les directives Apache.</li>
- <li> les noms de paramètres sont par contre sensibles à la casse.</li>
- <li> les paramètres d'une macro doivent avoir des noms distincts.</li>
- <li> il y a une erreur si un paramètre a un nom vide.</li>
- <li> la redéfinition d'une macro génère un avertissement.</li>
- <li> des définitions de macros peuvent être nichées les unes dans les autres...</li>
- <li> les paramètres inutilisés génèrent un avertissement.</li>
- <li> les noms de paramètre en préfixe les uns des autres génèrent un avertissement.</li>
- <li> les noms de paramètre non préfixés par '<code>$%@</code>' génèrent un
- avertissement pour encourager cette bonne pratique.</li>
- <li> les différents préfixes proposés permettent de gérer les interactions
- avec d'autres directives comme <directive module="core">Define</directive>.</li>
- <li> un conseil : il peut être utile d'ajouter des accolades autour du nom d'un
- paramètre, par exemple <code>${foo}</code>, de manière à ce que le
- paramètre puisse être utilisée avec des caractères collés autour,
- par exemple <code>bla${foo}bla</code>.</li>
- <li> génère un avertissement si le contenu de la macro est vide.</li>
- <li> génère un avertissement si le système détecte que les sections à l'intérieur
- d'une macro ne sont pas correctement nichées.</li>
- <li> la portée lexicale des paramètres d'une macro est restreinte au texte
- de la macro elle-même... en particulier elle n'est pas propagée aux inclusions.</li>
- <li> il n'y a pas de contrainte sur le contenu d'une macro.
- <p>Cela signifie que vous pouvez mettre une section perl ou n'importe
- quoi d'autre dans une macro. Il n'y a pas d'autre hypothèse sur la
- structure lexicale et syntaxique de la macro (guillemets, espaces...)
- que d'attendre une séquence de ligne avec éventuellement des
- continuations.</p></li>
- </ul>
-
- Utilisation d'une macro:
- <ul>
- <li> le nombre d'argument doit être cohérent avec la définition.</li>
- <li> toutes les occurences des paramètres sont substitués par leur valeur.</li>
- <li> en cas de conflit, le nom le plus long est choisit.</li>
- <li> une récursion dans l'expansion d'une macro est détectée et arrêtée avec une erreur.</li>
- <li> les arguments vides génèrent un avertissement si ils sont utilisés.</li>
- <li> le système génère une description très précise de la localisation des erreurs.</li>
- <li> les valeurs des paramètres préfixés par <code>$</code> et <code>%</code> ne sont pas protégés.</li>
- <li> les valeurs des paramètres préfixés par <code>@</code> sont protégés par des guillemets.</li>
- </ul>
-
- Effacement de la définition d'une macro :
- <ul>
- <li> la macro effacée doit avoir été définie auparavant.</li>
- </ul>
+<section id="usage"><title>Utilisation</title>
+<p>On définit une macro à l'aide des blocs <directive
+type="section">Macro</directive> qui contiennent la portion de votre
+configuration qui intervient de manière répétitive, y compris les
+variables pour les parties qui devront être substituées.</p>
+
+<p>Par exemple, vous pouvez utiliser une macro pour définir un bloc
+<directive type="section">VirtualHost</directive>, afin de pouvoir
+définir de nombreux serveurs virtuels similaires :</p>
<highlight language="config">
+<Macro VHost $name $domain>
+<VirtualHost *:80>
+ ServerName $domain
+ ServerAlias www.$domain
+
+ DocumentRoot /var/www/vhosts/$name
+ ErrorLog /var/log/httpd/$name.error_log
+ CustomLog /var/log/httpd/$name.access_log combined
+</VirtualHost>
+</Macro>
+</highlight>
+
+<p>Comme les directives de configuration httpd, les noms des macros sont
+insensibles à la casse, à la différence des variables qui y sont, elles,
+sensibles.</p>
+
+<p>Vous pouvez alors invoquer cette macro autant de fois que vous le
+voulez pour créer des serveurs virtuels </p>
+
+<highlight language="config">
+Use VHost example example.com
+Use VHost myhost hostname.org
+Use VHost apache apache.org
+
+UndefMacro VHost
+ </highlight>
+
+<p>Au démarrage du serveur, chacune de ces invocations
+<directive>Use</directive> sera remplacée par une définition de serveur
+virtuel complète, comme décrit dans la définition de la
+<directive>Macro</directive>.</p>
+
+<p>La directive <directive>UndefMacro</directive> permet d'éviter les
+conflits de définitions qui pourraient provenir de l'utilisation
+ultérieure de macros contenant les mêmes noms de variables.</p>
+
+<p>Vous trouverez une version plus élaborée de cet exemple plus loin
+dans la section Exemples.</p>
+
+</section>
+
+<section id="tips"><title>Conseils</title>
+
+<p>Les noms de paramètres doivent commencer par un sigil tel que
+<code>$</code>, <code>%</code>, ou <code>@</code>, de façon à ce qu'ils
+soient clairement identifiables, mais aussi afin de faciliter les
+interactions avec les autres directives, comme la directive de base
+<directive module="core">Define</directive>. Dans le cas contraire, vous
+recevrez un avertissement. En tout état de cause, il est conseillé
+d'avoir une bonne connaissance globale de la configuration du serveur,
+afin d'éviter la réutilisation des mêmes variables à différents niveaux,
+ce qui peut être à l'origine de confusions.</p>
+
+<p>Les paramètres préfixés par <code>$</code> ou <code>%</code> ne sont
+pas échappés. Les paramètres préfixés par <code>@</code> sont échappés
+entre guillemets.</p>
+
+<p>Evitez de préfixer un paramètre par le nom d'un autre paramètre (par
+exemple, présence simultanée des paramètres <code>$win</code> et
+<code>$winter</code>), car ceci peut introduire de la confusion lors de
+l'évaluation des expressions. Si cela se produit, c'est le nom de
+paramètre le plus long possible qui sera utilisé.</p>
+
+<p>Si vous désirez insérer une valeur dans une chaîne, il est conseillé
+de l'entourer d'accolades afin d'éviter toute confusion :</p>
+
+<highlight language="config">
+<Macro DocRoot ${docroot}>
+ DocumentRoot /var/www/${docroot}/htdocs
+</Macro>
+</highlight>
+
+</section>
+
+<section id="examples">
+<title>Exemples</title>
+
+<section>
+<title>Définition de serveurs virtuels</title>
+
+<p>Un exemple typique d'utilisation de <module>mod_macro</module> est la
+création dynamique de serveurs virtuels.</p>
+
+<highlight language="config">
+## Définition d'une macro VHost pour les configurations répétitives
+
+<Macro VHost $host $port $dir>
+ Listen $port
+ <VirtualHost *:$port>
+
+ ServerName $host
+ DocumentRoot $dir
+
+ # Racine des documents publique
+ <Directory $dir>
+ Require all granted
+ </Directory>
+
+ # restriction d'accès au sous-répertoire intranet.
+ <Directory $dir/intranet>
+ Require ip 10.0.0.0/8
+ </Directory>
+ </VirtualHost>
+</Macro>
+
+## Utilisation de la macro VHost avec différents arguments.
+
+Use VHost www.apache.org 80 /vhosts/apache/htdocs
+Use VHost example.org 8080 /vhosts/example/htdocs
+Use VHost www.example.fr 1234 /vhosts/example.fr/htdocs
+</highlight>
+</section> <!-- Vhosts -->
+
+<section>
+<title>Suppression d'une définition de macro</title>
+
+<p>Il est recommandé de supprimer la définition d'une macro après
+l'avoir utilisée. Ceci permet d'éviter les confusions au sein d'un
+fichier de configuration complexe où des conflits entre noms de
+variables peuvent survenir.</p>
+
+<highlight language="config">
<Macro DirGroup $dir $group>
<Directory $dir>
- require group $group
+ Require group $group
</Directory>
</Macro>
Use DirGroup /www/apache/server admin
UndefMacro DirGroup
- </highlight>
-</section>
+</highlight>
+
+</section> <!-- UndefMacro -->
+
+</section> <!-- Example -->
<!-- Macro -->
<directivesynopsis type="section">
</contextlist>
<usage>
- <p>La diretive <directive>Macro</directive> permet de définir une macro
+ <p>La directive <directive>Macro</directive> permet de définir une macro
dans un fichier de configuration Apache. Le premier argument est le nom
- de la macro, et les arguments suivants sont les noms des paramètres. Il
+ de la macro, et les arguments suivants sont les paramètres. Il
est de bon aloi de préfixer les noms des paramètres d'une macro
- avec un caractère parmi '<code>$%@</code>'.
+ avec un caractère parmi '<code>$%@</code>', et d'éviter d'en faire
+ de même avec les noms de macros.
</p>
<highlight language="config">
<Macro LocalAccessPolicy>
- order deny,allow
- deny from all
- allow from 10.2.16.0/24
+ Require ip 10.2.16.0/24
</Macro>
<Macro RestrictedAccessPolicy $ipnumbers>
- order deny,allow
- deny from all
- allow from $ipnumbers
+ Require ip $ipnumbers
</Macro>
</highlight>
</usage>
<!-- Use -->
<directivesynopsis>
<name>Use</name>
-<description>Utilise une macro</description>
+<description>Utilisation d'une macro</description>
<syntax>Use <var>nom</var> [<var>valeur1</var> ... <var>valeurN</var>]
</syntax>
<contextlist>
<usage>
<p> La directive <directive>Use</directive> permet d'utiliser une macro.
- La macro est expansée. Elle doit avoir le même nombre d'argument que le
+ La macro considérée est expansée. Son nombre d'arguments doit être égal au
nombre de paramètres précisés dans sa définition. Les valeurs passées en
- argument sont substituées avant l'interprétation du texte de la macro.</p>
+ argument sont attribuées aux paramètres correspondants et
+ substituées avant l'interprétation du texte de la macro.</p>
<highlight language="config">
Use LocalAccessPolicy
Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"
</highlight>
- est équivalent, avec les macros définies au dessus, à :
+ <p>est équivalent, avec les macros définies ci-dessus à :</p>
<highlight language="config">
-order deny,allow
-deny from all
-allow from 10.2.16.0/24
+Require ip 10.2.16.0/24
...
-order deny,allow
-deny from all
-allow from 192.54.172.0/24 192.54.148.0/24
+Require ip 192.54.172.0/24 192.54.148.0/24
</highlight>
</usage>
</directivesynopsis>
<!-- UndefMacro -->
<directivesynopsis>
<name>undefMacro</name>
-<description>Efface une macro</description>
+<description>Supprime une macro</description>
<syntax>UndefMacro <var>nom</var></syntax>
<contextlist>
</contextlist>
<usage>
- <p>La directive <directive>UndefMacro</directive> efface la définition
- d'une macro, qui doit avoir été définie auparavant.</p>
+ <p>La directive <directive>UndefMacro</directive> annule la définition
+ d'une macro qui doit avoir été définie auparavant.</p>
<highlight language="config">
UndefMacro LocalAccessPolicy
</highlight>
</usage>
</directivesynopsis>
+
</modulesynopsis>