<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/bind.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Configuration du serveur HTTP Apache pour l'écoute
sur un port et une adresse IP spécifiques.</p>
<p>Par exemple, pour faire en sorte que le serveur accepte des connexions
sur les ports 80 et 8000, sur toutes les interfaces, utilisez :</p>
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
+ <pre class="prettyprint lang-config">
+Listen 80
+Listen 8000
+ </pre>
+
<p>Pour faire en sorte que le serveur accepte des connexions sur le port 80
pour une interface, et sur le port 8000 pour une
autre interface, utilisez :</p>
- <div class="example"><p><code>
- Listen 192.0.2.1:80<br />
- Listen 192.0.2.5:8000
- </code></p></div>
+ <pre class="prettyprint lang-config">
+Listen 192.0.2.1:80
+Listen 192.0.2.5:8000
+ </pre>
+
<p>Les adresses IPv6 doivent être mises entre crochets, comme dans
l'exemple suivant :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
Listen [2001:db8::a00:20ff:fea7:ccea]:80
- </code></p></div>
+ </pre>
+
<div class="warning"><p>Des directives <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
imbriquées provoqueront une erreur fatale qui
<code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>, comme dans l'exemple
suivant :</p>
- <div class="example"><p><code>
- Listen 0.0.0.0:80<br />
- Listen 192.0.2.1:80
- </code></p></div>
+ <pre class="prettyprint lang-config">
+Listen 0.0.0.0:80
+Listen 192.0.2.1:80
+ </pre>
+
<p>Si votre plateforme le supporte et si vous souhaitez que httpd gère
des connexions IPv4 et IPv6 sur des points de connexion séparés
des ports non standards. Par exemple, pour travailler en
<code>https</code> sur le port 8443 :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
Listen 192.170.2.1:8443 https
- </code></p></div>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="virtualhost" id="virtualhost">Comment tout ceci fonctionne-t-il avec les hôtes virtuels</a></h2>
<variants>
<variant outdated="yes">de</variant>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="./fr/caching.html" title="Français"> fr </a> |
<a href="./tr/caching.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document complète la documentation de référence des modules
<code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code>,
<p>En général, le module se configure comme suit :</p>
- <div class="example"><p><code>
-CacheRoot /var/cache/apache/<br />
-CacheEnable disk /<br />
-CacheDirLevels 2<br />
+ <pre class="prettyprint lang-config">
+CacheRoot "/var/cache/apache/"
+CacheEnable disk /
+CacheDirLevels 2
CacheDirLength 1
- </code></p></div>
+ </pre>
+
<p>Il est important de savoir que, les fichiers mis en cache étant stockés
localement, la mise en cache par l'intermédiaire du système d'exploitation
réutiliser le descripteur de fichier mis en cache pour tous les
accès futurs à ce fichier.</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
CacheFile /usr/local/apache2/htdocs/index.html
- </code></p></div>
+ </pre>
+
<p>Si vous désirez mettre en cache un grand nombre de fichiers
de cette manière, vous devez vous assurer que le nombre maximal
utilisera le contenu chargé en mémoire pour satisfaire ultérieurement
toutes les demandes d'accès à ce fichier.</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
MMapFile /usr/local/apache2/htdocs/index.html
- </code></p></div>
+ </pre>
+
<p>Comme dans le cas de la directive
<code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>, toute
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">tr</variant>
</variants>
</metafile>
<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Apache HTTPD supporte la négociation de
gestionnaire qui associe un suffixe de fichier à une <code>type-map</code>;
ce qui se fait simplement en ajoutant</p>
-<div class="example"><p><code>AddHandler type-map .var</code></p></div>
+<pre class="prettyprint lang-config">AddHandler type-map .var</pre>
+
<p>dans le fichier de configuration du serveur.</p>
<p><code>MultiViews</code> peut aussi s'appliquer à la recherche du fichier
nommé par la directive <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>, si le serveur tente d'indexer
un répertoire. Si les fichiers de configuration spécifient</p>
-<div class="example"><p><code>DirectoryIndex index</code></p></div>
+<pre class="prettyprint lang-config">DirectoryIndex index</pre>
+
<p>le serveur va choisir entre <code>index.html</code>
et <code>index.html3</code> si les deux fichiers sont présents. Si aucun
n'est présent, mais <code>index.cgi</code> existe,
de sélectionner une variante correspondante. S'il n'existe pas de telle
variante, le processus normal de négociation sera lancé.</p>
- <div class="example"><h3>Exemple</h3><p><code>
- SetEnvIf Cookie "language=(.+)" prefer-language=$1<br />
- Header append Vary cookie
- </code></p></div>
+ <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">
+SetEnvIf Cookie "language=(.+)" prefer-language=$1
+Header append Vary cookie
+ </pre>
+</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="./ko/custom-error.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/custom-error.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Le serveur HTTP Apache fournit des messages d'erreur génériques
pour les codes de statut 4xx ou 5xx ; ces messages sont cependant
.htaccess si <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> est
définie à FileInfo.</p>
- <div class="example"><p><code>
- ErrorDocument 500 "Désolé, notre script s'est crashé ; comme c'est
- dommage !"<br />
- ErrorDocument 500 /cgi-bin/crash-recover<br />
- ErrorDocument 500 http://erreur.example.com/erreur_serveur.html<br />
- ErrorDocument 404 /erreurs/non_trouve.html <br />
- ErrorDocument 401 /inscription/comment_s_inscrire.html
- </code></p></div>
+ <pre class="prettyprint lang-config">
+ErrorDocument 500 "Désolé, notre script s'est
+crashé ; comme c'est dommage !"<br />
+ErrorDocument 500 /cgi-bin/crash-recover<br />
+ErrorDocument 500 http://error.example.com/server_error.html<br />
+ErrorDocument 404 /errors/not_found.html <br />
+ErrorDocument 401 /subscription/how_to_subscribe.html
+ </pre>
+
<p>La syntaxe de la directive <code>ErrorDocument</code> est :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
ErrorDocument <code_3_chiffres> <action>
- </code></p></div>
+ </pre>
+
<p>où action peut être traitée comme :</p>
<ol>
<li>Une URL de redirection local (si l'action commence par un "/").</li>
<variants>
<variant>en</variant>
<variant outdated="yes">es</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="./ko/dns-caveats.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/dns-caveats.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Cette page pourrait se résumer ainsi : configurez le
serveur HTTP Apache de façon
<h2><a name="example" id="example">Un exemple simple</a></h2>
- <div class="example"><p><code>
- # Cet exemple de configuration est invalide, ne l'utilisez pas comme base
- # de configuration
- <VirtualHost www.example.dom> <br />
- ServerAdmin webgirl@example.dom <br />
- DocumentRoot /www/example <br />
- </VirtualHost>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+# Ceci est un exemple de mauvaise configuration ; ne l'utilisez pas comme base
+# de configuration
+<VirtualHost www.example.dom>
+ ServerAdmin webgirl@example.dom
+ DocumentRoot /www/example
+</VirtualHost>
+ </pre>
+
<p>Pour fonctionner correctement, le serveur a absolument besoin de deux
informations à propos de chaque serveur virtuel : le nom du serveur
<p>Supposons que l'adresse de <code>www.example.dom</code> soit
192.0.2.1, et examinons cet extrait de configuration :</p>
- <div class="example"><p><code>
- # Cet exemple de configuration est invalide, ne l'utilisez pas comme base
- # de configuration
- <VirtualHost 192.0.2.1> <br />
- ServerAdmin webgirl@example.dom <br />
- DocumentRoot /www/example <br />
- </VirtualHost>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+# Ceci est un exemple de mauvaise configuration ; ne l'utilisez pas comme base
+# de configuration
+<VirtualHost 192.0.2.1>
+ ServerAdmin webgirl@example.dom
+ DocumentRoot /www/example
+</VirtualHost>
+ </pre>
+
<p>Cette fois, httpd doit effectuer une recherche DNS inverse pour
trouver le nom <code>ServerName</code> de ce serveur virtuel. Si
<p>Voici un extrait de configuration qui permet d'éviter ces deux
types de problèmes :</p>
- <div class="example"><p><code>
- <VirtualHost 192.0.2.1> <br />
- ServerName www.example.dom <br />
- ServerAdmin webgirl@example.dom <br />
- DocumentRoot /www/example <br />
- </VirtualHost>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<VirtualHost 192.0.2.1>
+ ServerName www.example.dom
+ ServerAdmin webgirl@example.dom
+ DocumentRoot /www/example
+</VirtualHost>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="denial" id="denial">Déni de service</a></h2>
<p>Considérons cet extrait de configuration :</p>
- <div class="example"><p><code>
- <VirtualHost www.example1.dom><br />
- <span class="indent">
- ServerAdmin webgirl@example1.dom<br />
- DocumentRoot /www/example1<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost www.example2.dom><br />
- <span class="indent">
- ServerAdmin webguy@example2.dom<br />
- DocumentRoot /www/example2<br />
- </span>
- </VirtualHost>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<VirtualHost www.example1.dom>
+ ServerAdmin webgirl@example1.dom
+ DocumentRoot /www/example1
+</VirtualHost>
+<VirtualHost www.example2.dom>
+ ServerAdmin webguy@example2.dom
+ DocumentRoot /www/example2
+</VirtualHost>
+ </pre>
+
<p>Supposons que vous ayez assigné 192.0.2.1 à
<code>www.example1.dom</code> et 192.0.2.2 à <code>www.example2.dom</code>. En
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/env.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Deux types de variables d'environnement affectent le serveur
HTTP Apache.</p>
<code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code> et <code class="module"><a href="./mod/mod_header.html">mod_header</a></code>,
et permettant de prendre en compte ces en-têtes :</p>
-<div class="example"><p><code>
-# <br />
+<pre class="prettyprint lang-config">
# L'exemple suivant montre comment prendre en compte un en-tête<br />
-# Accept_Encoding non conforme envoyé par un client.<br />
-#<br />
-SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1<br />
+# Accept_Encoding non conforme envoyé par un client.
+#
+SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1
RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding
-</code></p></div>
+</pre>
+
httpd.conf pour tenir compte de problèmes connus avec certains clients.
Comme les clients concernés sont maintenant très peu utilisés, cet
ajout n'est pratiquement plus nécessaire.</p>
-<div class="example"><p><code>
-#<br />
-# The following directives modify normal HTTP response behavior.<br />
-# The first directive disables keepalive for Netscape 2.x and browsers that<br />
-# spoof it. There are known problems with these browser implementations.<br />
-# The second directive is for Microsoft Internet Explorer 4.0b2<br />
-# which has a broken HTTP/1.1 implementation and does not properly<br />
-# support keepalive when it is used on 301 or 302 (redirect) responses.<br />
-#<br />
-BrowserMatch "Mozilla/2" nokeepalive<br />
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0<br />
-<br />
-#<br />
-# The following directive disables HTTP/1.1 responses to browsers which<br />
-# are in violation of the HTTP/1.0 spec by not being able to grok a<br />
-# basic 1.1 response.<br />
-#<br />
-BrowserMatch "RealPlayer 4\.0" force-response-1.0<br />
-BrowserMatch "Java/1\.0" force-response-1.0<br />
+<pre class="prettyprint lang-config">
+#
+# The following directives modify normal HTTP response behavior.
+# The first directive disables keepalive for Netscape 2.x and browsers that
+# spoof it. There are known problems with these browser implementations.
+# The second directive is for Microsoft Internet Explorer 4.0b2
+# which has a broken HTTP/1.1 implementation and does not properly
+# support keepalive when it is used on 301 or 302 (redirect) responses.
+#
+BrowserMatch "Mozilla/2" nokeepalive
+BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
+
+#
+# The following directive disables HTTP/1.1 responses to browsers which
+# are in violation of the HTTP/1.0 spec by not being able to grok a
+# basic 1.1 response.
+#
+BrowserMatch "RealPlayer 4\.0" force-response-1.0
+BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
-</code></p></div>
+</pre>
+
<h3><a name="no-img-log" id="no-img-log">Ne pas tracer les requêtes pour des images dans le fichier de
dans le fichier de trace des accès. Il peut être facilement adapté pour
empêcher le traçage de répertoires particuliers, ou de requêtes
en provenance de certains hôtes.</p>
- <div class="example"><p><code>
- SetEnvIf Request_URI \.gif image-request<br />
- SetEnvIf Request_URI \.jpg image-request<br />
- SetEnvIf Request_URI \.png image-request<br />
- CustomLog logs/access_log common env=!image-request
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SetEnvIf Request_URI \.gif image-request
+SetEnvIf Request_URI \.jpg image-request
+SetEnvIf Request_URI \.png image-request
+CustomLog logs/access_log common env=!image-request
+ </pre>
+
<h3><a name="image-theft" id="image-theft">Prévention du "Vol d'image"</a></h3>
recommandée, mais elle peut fonctionner dans des circonstances bien
définies. Nous supposons que toutes vos images sont enregistrées dans
un répertoire nommé <code>/web/images</code>.</p>
- <div class="example"><p><code>
- SetEnvIf Referer "^http://www\.example\.com/" local_referal<br />
- # Allow browsers that do not send Referer info<br />
- SetEnvIf Referer "^$" local_referal<br />
- <Directory /web/images><br />
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=local_referal
- </span>
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SetEnvIf Referer "^http://www\.example\.com/" local_referal
+# Autorise les navigateurs qui n'envoient aucune information de Referer
+SetEnvIf Referer "^$" local_referal
+<Directory /web/images>
+ Order Deny,Allow
+ Deny from all
+ Allow from env=local_referal
+</Directory>
+ </pre>
+
<p>Pour plus d'informations sur cette technique, voir le tutoriel sur
ServerWatch
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<p><span>Langues Disponibles: </span><a href="./en/expr.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="./fr/expr.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Historiquement, il existe de nombreuses variantes dans la syntaxe
des expressions permettant d'exprimer une condition dans les
<p>Les exemples suivants montent comment utiliser les
expressions pour évaluer les requêtes :</p>
- <div class="example"><p><code>
- # Comparer le nom d'hôte avec example.com et rediriger vers
- # www.example.com si le nom d'hôte correspond<br />
- <If "%{HTTP_HOST} == 'example.com'"><br />
- <span class="indent">
- Redirect permanent / http://www.example.com<br />
- </span>
- </If><br /><br />
- # Forcer le type text/plain si un fichier fait l'objet d'une
- # requête dont la chaîne de paramètres contient 'forcetext'<br />
- <If "%{QUERY_STRING} =~ /forcetext/"><br />
- <span class="indent">
- ForceType text/plain<br />
- </span>
- </If><br /><br />
- # N'autoriser l'accès à ce contenu que pendant les heures de
- # travail<br />
- <Directory "/foo/bar/business"><br />
- <span class="indent">
- Require expr %{TIME_HOUR} >= 9 && %{TIME_HOUR} <= 17 <br />
- </span>
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+# Comparer le nom d'hôte avec example.com et rediriger vers
+# www.example.com si le nom d'hôte correspond
+<If "%{HTTP_HOST} == 'example.com'">
+ Redirect permanent / http://www.example.com
+</If>
+
+# Forcer le type text/plain si un fichier fait l'objet d'une
+# requête dont la chaîne de paramètres contient 'forcetext'
+<If "%{QUERY_STRING} =~ /forcetext/">
+ ForceType text/plain
+</If>
+
+# N'autoriser l'accès à ce contenu que pendant les heures de
+# travail
+<Directory "/foo/bar/business">
+ Require expr %{TIME_HOUR} >= 9 && %{TIME_HOUR} <= 17
+</Directory>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="other" id="other">Autres</a></h2>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/glossary.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce glossaire définit la terminologie courante relative à Apache en
particulier, et aux serveurs web en général. Vous trouverez plus
</dd>
<dt><a name="apr" id="apr">APR</a></dt>
- <dd>Voir <a href="#apacheportableruntime">"
- Bibliothèques pour la portabilité d'Apache"</a>
+ <dd>Voir "Bibliothèques pour la portabilité d'Apache"
</dd>
<dt><a name="tarball" id="tarball">Archive Tar (Tarball)</a></dt>
</dd>
<dt><a name="apacheportableruntime" id="apacheportableruntime">Bibliothèques pour la portabilité d'Apache
- (Apache Portable Runtime, APR)</a></dt>
+ (Apache Portable Runtime)</a> <a name="apr" id="apr">(APR)</a></dt>
<dd>Un jeu de bibliothèques qui fournit la plupart des interfaces de base
entre le serveur et le système d'exploitation. APR est développé
parallèlement au serveur HTTP Apache comme projet indépendant.<br />
<variant outdated="yes">de</variant>
<variant>en</variant>
<variant outdated="yes">es</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="./tr/handler.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> |
<a href="./zh-cn/handler.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document décrit l'utilisation des gestionnaires d'Apache (handlers).</p>
</div>
des fichiers possédant une extension <code>html</code> déclenchent
l'exécution du script CGI <code>footer.pl</code>.</p>
- <div class="example"><p><code>
- Action add-footer /cgi-bin/footer.pl<br />
- AddHandler add-footer .html
- </code></p></div>
+ <pre class="prettyprint lang-config">
+Action add-footer /cgi-bin/footer.pl
+AddHandler add-footer .html
+ </pre>
+
<p>À ce moment-là, le script CGI se charge d'envoyer le document
initialement demandé (référencé par la variable d'environnement
<code>send-as-is</code>, sans tenir compte de l'extension
de leur nom de fichier.</p>
- <div class="example"><p><code>
- <Directory /web/htdocs/asis><br />
- SetHandler send-as-is<br />
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<Directory /web/htdocs/asis>
+ SetHandler send-as-is
+</Directory>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
Plus précisément, un nouvel enregistrement a été ajouté à la structure
<code>request_rec</code> :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-c">
char *handler
- </code></p></div>
+ </pre>
+
<p>Si vous voulez que votre module déclenche l'utilisation d'un
gestionnaire, il vous suffit de définir <code>r->handler</code> avec
<variants>
<variant>en</variant>
<variant outdated="yes">es</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<pre class="prettyprint lang-config">
Require not ip 192.168.205
Require not host phishers.example.com moreidiots.example
-Require not gov
+Require not host gov
</pre>
<a href="./tr/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> |
<a href="./zh-cn/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Recherche Google" type="submit" /><input value="10" name="num" type="hidden" /><input value="fr" name="hl" type="hidden" /><input value="ISO-8859-1" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Version 2.4" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value=""List-Post"" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Notes de version</a></h2>
<ul><li><a href="new_features_2_4.html">Nouvelles fonctionnalités dApache 2.3/2.4</a></li>
<ul><li><a href="http://wiki.apache.org/httpd/FAQ">Foire Aux Questions</a></li>
<li><a href="sitemap.html">Plan du site</a></li>
<li><a href="developer/">Documentation du développeur</a></li>
+<li><a href="http://httpd.apache.org/docs-project/">Aide pour la
+ documentation</a></li>
<li><a href="misc/">Autres notes</a></li>
<li><a href="http://wiki.apache.org/httpd/">Wiki</a></li>
</ul>
<variant outdated="yes">de</variant>
<variant>en</variant>
<variant outdated="yes">es</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">pt-br</variant>
<div class="section">
<h2><a name="boot" id="boot">Lancement au démarrage du système</a></h2>
- <p>Si vous souhaitez que votre serveur continue de fonctionner après
+ <p>Si vous souhaitez que votre serveur web fonctionne après
un redémarrage du système, vous devez ajouter un appel à
<code class="program"><a href="./programs/apachectl.html">apachectl</a></code> à vos
fichiers de démarrage système (en général <code>rc.local</code> ou un
<a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/logs.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Pour véritablement gérer un serveur web,
il est nécessaire de disposer d'un
<p>Pour ce faire, vous devez spécifier le nom du module dans votre
directive <code class="directive">LogLevel</code> :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
LogLevel info rewrite:trace5
- </code></p></div>
+ </pre>
+
<p>Dans cet exemple, le niveau de journalisation général est défini
à info, et à <code>trace5</code> pour <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
<p>Voici une configuration typique pour le journal des accès :</p>
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
- CustomLog logs/access_log common
- </code></p></div>
+ <pre class="prettyprint lang-config">
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+CustomLog logs/access_log common
+ </pre>
+
<p>Ici est définie l'<em>identité</em> <code>common</code> qui est
ensuite associée à une chaîne de format de journalisation particulière.
"Combined Log Format" (Format de journalisation combiné). Il s'utilise
comme suit :</p>
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
- \"%{User-agent}i\"" combined<br />
- CustomLog log/access_log combined
- </code></p></div>
+ <pre class="prettyprint lang-config">
+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
+CustomLog log/access_log combined
+ </pre>
+
<p>Ce format est identique au Common Log Format, avec deux champs
supplémentaires. Chacun de ces deux champs utilise la directive
comment simuler les effets des directives <code>ReferLog</code> et
<code>AgentLog</code>.</p>
- <div class="example"><p><code>
- LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
- CustomLog logs/access_log common<br />
- CustomLog logs/referer_log "%{Referer}i -> %U"<br />
- CustomLog logs/agent_log "%{User-agent}i"
- </code></p></div>
+ <pre class="prettyprint lang-config">
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+CustomLog logs/access_log common
+CustomLog logs/referer_log "%{Referer}i -> %U"
+CustomLog logs/agent_log "%{User-agent}i"
+ </pre>
+
<p>Cet exemple montre aussi qu'il n'est pas obligatoire d'associer
une chaîne de format à un alias au moyen de la directive
la variable d'environnement est définie.
Quelques exemples :</p>
- <div class="example"><p><code>
- # Marque les requêtes en provenance de l'interface loop-back<br />
- SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
- # Marque les requêtes pour le fichier robots.txt<br />
- SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
- # Journalise toutes les autres requêtes<br />
- CustomLog logs/access_log common env=!dontlog
- </code></p></div>
+ <pre class="prettyprint lang-config">
+# Marque les requêtes en provenance de l'interface loop-back
+SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
+# Marque les requêtes pour le fichier robots.txt
+SetEnvIf Request_URI "^/robots\.txt$" dontlog
+# Journalise toutes les autres requêtes
+CustomLog logs/access_log common env=!dontlog
+ </pre>
+
<p>Autre exemple, imaginons l'enregistrement des requêtes en provenance
d'utilisateurs de langue anglaise dans un journal, et celles des autres
utilisateurs dans un autre journal.</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
SetEnvIf Accept-Language "en" english<br />
CustomLog logs/english_log common env=english<br />
CustomLog logs/non_english_log common env=!english
- </code></p></div>
+ </pre>
+
<p>Dans le contexte d'une mise en cache, il peut être
intéressant de connaître l'efficacité du cache. Pour y parvenir,
on pourrait utiliser cette méthode simple :</p>
- <div class="example"><p><code>
- SetEnv CACHE_MISS 1<br />
- LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache<br />
- CustomLog logs/access_log common-cache
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SetEnv CACHE_MISS 1
+LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
+CustomLog logs/access_log common-cache
+ </pre>
+
<p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va s'exécuter avant
<code class="module"><a href="./mod/mod_env.html">mod_env</a></code>, et si son action est couronnée de
valeurs de journalisation conditionnelles basées sur le code de la
réponse HTTP :</p>
- <div class="example"><p><code>
- LogFormat "%400,501{User-agent}i" browserlog<br />
- LogFormat "%!200,304,302{Referer}i" refererlog
- </code></p></div>
+ <pre class="prettyprint lang-config">
+LogFormat "%400,501{User-agent}i" browserlog
+LogFormat "%!200,304,302{Referer}i" refererlog
+ </pre>
+
<p>Dans le premier exemple, le <code>User-agent</code> sera
enregistré si le code d'état HTTP est 400 ou 501. Dans le cas
appelé <code class="program"><a href="./programs/rotatelogs.html">rotatelogs</a></code>. Par exemple, pour une rotation des
journaux toutes les 24 heures, ajoutez ces lignes :</p>
- <div class="example"><p><code>
- CustomLog "|/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </code></p></div>
+ <pre class="prettyprint lang-config">
+ CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
+ </pre>
+
<p>Notez que l'ensemble de la commande qui sera appelée par le tube de
communication a été placée entre guillemets. Bien que cet exemple
au lieu de "<code>|</code>" (en général avec <code>/bin/sh -c</code>)
:</p>
- <div class="example"><p><code>
- # Invocation de "rotatelogs" en utilisant un shell<br />
- CustomLog "|$/usr/local/apache/bin/rotatelogs
- /var/log/access_log 86400" common
- </code></p></div>
+ <pre class="prettyprint lang-config">
+# Invocation de "rotatelogs" en utilisant un shell
+CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
+ </pre>
+
+
<p>Il s'agissait du comportement par défaut sous Apache 2.2. Selon
les spécificités du shell, ceci peut générer un processus shell
journal, puis de séparer ultérieurement le journal en plusieurs journaux
individuels. Considérons par exemple les directives suivantes :</p>
- <div class="example"><p><code>
- LogFormat "%v %l %u %t \"%r\" %>s %b"
- comonvhost<br />
- CustomLog logs/access_log comonvhost
- </code></p></div>
+ <pre class="prettyprint lang-config">
+LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost
+CustomLog logs/access_log comonvhost
+ </pre>
+
<p>Le champ <code>%v</code> sert à enregistrer le nom de l'hôte virtuel qui
traite la requête. Un programme tel que <a href="programs/other.html">split-logfile</a> peut ensuite être utilisé
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="../ko/misc/perf-tuning.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="../tr/misc/perf-tuning.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Apache 2.x est un serveur web à usage général, conçu dans un but
Voici un exemple qui désactive les recherches DNS sauf pour les fichiers
<code>.html</code> et <code>.cgi</code> :</p>
- <div class="example"><p><code>
- HostnameLookups off<br />
- <Files ~ "\.(html|cgi)$"><br />
- <span class="indent">
- HostnameLookups on<br />
- </span>
- </Files>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+HostnameLookups off
+<Files ~ "\.(html|cgi)$">
+ HostnameLookups on
+</Files>
+ </pre>
+
<p>Mais même dans ce cas, si vous n'avez besoin de noms DNS que dans
certains CGIs, vous pouvez effectuer l'appel à <code>gethostbyname</code>
symboliques. Un appel supplémentaire par élément du chemin du fichier.
Par exemple, si vous avez :</p>
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- <Directory /><br />
- <span class="indent">
- Options SymLinksIfOwnerMatch<br />
- </span>
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+DocumentRoot /www/htdocs
+<Directory />
+ Options SymLinksIfOwnerMatch
+</Directory>
+ </pre>
+
<p>et si une requête demande l'URI <code>/index.html</code>, Apache
effectuera un appel à <code>lstat(2)</code> pour
vérifier la sécurité des liens symboliques, vous pouvez utiliser une
configuration du style :</p>
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- <Directory /><br />
- <span class="indent">
- Options FollowSymLinks<br />
- </span>
- </Directory><br />
- <br />
- <Directory /www/htdocs><br />
- <span class="indent">
- Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
- </span>
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+DocumentRoot /www/htdocs
+<Directory />
+ Options FollowSymLinks
+</Directory>
+
+<Directory /www/htdocs>
+ Options -FollowSymLinks +SymLinksIfOwnerMatch
+</Directory>
+ </pre>
+
<p>Ceci évite au moins les vérifications supplémentaires pour le chemin
défini par <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. Notez que
pour chaque élément du chemin du fichier demandé. Par exemple, si vous
avez : </p>
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- <Directory /><br />
- <span class="indent">
- AllowOverride all<br />
- </span>
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+DocumentRoot /www/htdocs
+<Directory />
+ AllowOverride all
+</Directory>
+ </pre>
+
<p>et qu'une requête demande l'URI <code>/index.html</code>, Apache
tentera d'ouvrir <code>/.htaccess</code>, <code>/www/.htaccess</code>,
Il y a cependant un cas dans lequel vous pouvez accélérer le serveur.
Au lieu d'utiliser une directive générique comme :</p>
- <div class="example"><p><code>
- DirectoryIndex index
- </code></p></div>
+ <pre class="prettyprint lang-config">DirectoryIndex index</pre>
+
<p>utilisez une liste explicite d'options :</p>
- <div class="example"><p><code>
- DirectoryIndex index.cgi index.pl index.shtml index.html
- </code></p></div>
+ <pre class="prettyprint lang-config">DirectoryIndex index.cgi index.pl index.shtml index.html</pre>
+
<p>où vous placez le choix courant en première position.</p>
serveurs présentant un traffic important car il possède une empreinte
mémoire plus petite que le MPM prefork.</li>
+ <li>Comme le MPM Worker, le MPM <code class="module"><a href="../mod/event.html">event</a></code> utilise
+ les threads, mais il a été conçu pour traiter davantage de
+ requêtes simultanément en confiant une partie du travail à des
+ threads de support, ce qui permet aux threads principaux de
+ traiter de nouvelles requêtes.</li>
+
<li>Le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code> utilise plusieurs processus enfants
possédant chacun un seul thread. Chaque processus gère une seule
connexion à la fois. Sur de nombreux systèmes, prefork est comparable
(ces exemples ne sont pas extraits du code d'Apache, ils ne sont
proposés qu'à des fins pédagogiques) :</p>
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&accept_fds);<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br />
- if (rc < 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- process the new_connection;<br />
- </span>
+ <pre class="prettyprint lang-c">
+ for (;;) {
+ for (;;) {
+ fd_set accept_fds;
+
+ FD_ZERO (&accept_fds);
+ for (i = first_socket; i <= last_socket; ++i) {
+ FD_SET (i, &accept_fds);
+ }
+ rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
+ if (rc < 1) continue;
+ new_connection = -1;
+ for (i = first_socket; i <= last_socket; ++i) {
+ if (FD_ISSET (i, &accept_fds)) {
+ new_connection = accept (i, NULL, NULL);
+ if (new_connection != -1) break;
+ }
+ }
+ if (new_connection != -1) break;
+ }
+ process_the(new_connection);
}
- </code></p></div>
+ </pre>
+
<p>Mais cette implémentation rudimentaire présente une sérieuse lacune.
Rappelez-vous que les processus enfants exécutent cette boucle au même
entrées dans la boucle interne. La boucle ressemble à ceci (les
différences sont mises en surbrillance) :</p>
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- <strong>accept_mutex_on ();</strong><br />
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&accept_fds);<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br />
- if (rc < 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- <strong>accept_mutex_off ();</strong><br />
- process the new_connection;<br />
- </span>
+ <pre class="prettyprint lang-c">
+ for (;;) {
+ <strong>accept_mutex_on ();</strong>
+ for (;;) {
+ fd_set accept_fds;
+
+ FD_ZERO (&accept_fds);
+ for (i = first_socket; i <= last_socket; ++i) {
+ FD_SET (i, &accept_fds);
+ }
+ rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
+ if (rc < 1) continue;
+ new_connection = -1;
+ for (i = first_socket; i <= last_socket; ++i) {
+ if (FD_ISSET (i, &accept_fds)) {
+ new_connection = accept (i, NULL, NULL);
+ if (new_connection != -1) break;
+ }
+ }
+ if (new_connection != -1) break;
+ }
+ <strong>accept_mutex_off ();</strong>
+ process the new_connection;
}
- </code></p></div>
+ </pre>
+
<p><a id="serialize" name="serialize">Les fonctions</a>
<code>accept_mutex_on</code> et <code>accept_mutex_off</code>
<code>http_main.c</code>). La fonction ressemble approximativement à
ceci :</p>
- <div class="example"><p><code>
- void lingering_close (int s)<br />
- {<br />
- <span class="indent">
- char junk_buffer[2048];<br />
- <br />
- /* shutdown the sending side */<br />
- shutdown (s, 1);<br />
- <br />
- signal (SIGALRM, lingering_death);<br />
- alarm (30);<br />
- <br />
- for (;;) {<br />
- <span class="indent">
- select (s for reading, 2 second timeout);<br />
- if (error) break;<br />
- if (s is ready for reading) {<br />
- <span class="indent">
- if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) {<br />
- <span class="indent">
- break;<br />
- </span>
- }<br />
- /* just toss away whatever is here */<br />
- </span>
- }<br />
- </span>
- }<br />
- <br />
- close (s);<br />
- </span>
+ <pre class="prettyprint lang-c">
+ void lingering_close (int s)
+ {
+ char junk_buffer[2048];
+
+ /* shutdown the sending side */
+ shutdown (s, 1);
+
+ signal (SIGALRM, lingering_death);
+ alarm (30);
+
+ for (;;) {
+ select (s for reading, 2 second timeout);
+ if (error) break;
+ if (s is ready for reading) {
+ if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) {
+ break;
+ }
+ /* just toss away whatever is here */
+ }
+ }
+
+ close (s);
}
- </code></p></div>
+ </pre>
+
<p>Ceci ajoute naturellement un peu de charge à la fin d'une connexion,
mais s'avère nécessaire pour une implémentation fiable. Comme HTTP/1.1
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
</variants>
<a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document propose quelques conseils et astuces concernant les
problèmes de sécurité liés
<p>Ajoutez dans le fichier de configuration du serveur</p>
- <div class="example"><p><code>
- <Directory /> <br />
- AllowOverride None <br />
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<Directory />
+ AllowOverride None
+</Directory>
+ </pre>
+
<p>Ceci interdit l'utilisation des fichiers <code>.htaccess</code> dans
tous les répertoires, sauf ceux pour lesquels c'est explicitement
fichiers. Pour l'éviter, ajoutez le bloc suivant à la configuration
de votre serveur :</p>
- <div class="example"><p><code>
- <Directory /> <br />
- Order Deny,Allow <br />
- Deny from all <br />
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<Directory />
+ Order Deny,Allow
+ Deny from all
+</Directory>
+ </pre>
+
<p>ceci va interdire l'accès par défaut à tous les fichiers du système de
fichiers. Vous devrez ensuite ajouter les blocs
<code class="directive"><a href="../mod/core.html#directory">Directory</a></code> appropriés correspondant
aux répertoires auxquels vous voulez autorisez l'accès. Par exemple,</p>
- <div class="example"><p><code>
- <Directory /usr/users/*/public_html> <br />
- Order Deny,Allow <br />
- Allow from all <br />
- </Directory> <br />
- <Directory /usr/local/httpd> <br />
- Order Deny,Allow <br />
- Allow from all <br />
- </Directory>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<Directory /usr/users/*/public_html>
+ Order Deny,Allow
+ Allow from all
+</Directory>
+<Directory /usr/local/httpd>
+ Order Deny,Allow
+ Allow from all
+</Directory>
+ </pre>
+
<p>Portez une attention particulière aux interactions entre les directives
<code class="directive"><a href="../mod/core.html#location">Location</a></code> et
fortement d'inclure la ligne suivante dans le fichier de configuration de
votre serveur :</p>
- <div class="example"><p><code>
- UserDir disabled root
- </code></p></div>
+ <pre class="prettyprint lang-config">UserDir disabled root</pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
qui signifie que vous avez probablement mis en commentaire ce qui suit dans
le fichier de configuration de votre serveur :</p>
- <div class="example"><p><code>
- <Files ".ht*"> <br />
- Order allow,deny <br />
- Deny from all <br />
- </Files>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<Files ".ht*">
+ Order allow,deny
+ Deny from all
+</Files>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
</variants>
<a href="../fr/mod/mod_proxy.html" title="Français"> fr </a> |
<a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Serveur mandataire/passerelle multi-protocole</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>proxy_module</td></tr>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
</variants>
</metafile>
<p><span>Langues Disponibles: </span><a href="../en/rewrite/access.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/access.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">documentation de référence</a> de
-<div class="example"><p><code>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong><br />
-RewriteCond %{HTTP_REFERER} !www.example.com [NC]<br />
-RewriteRule <strong>\.(gif|jpg|png)$</strong> - [F,NC]
-</code></p></div>
+<pre class="prettyprint lang-config">
+RewriteCond %{HTTP_REFERER} !^$
+RewriteCond %{HTTP_REFERER} !www.example.com [NC]
+RewriteRule \.(gif|jpg|png)$ - [F,NC]
+</pre>
+
<p>Dans le second exemple, plutôt que de rejeter la requête,
nous affichons une autre image à la place.</p>
-<div class="example"><p><code>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong><br />
-RewriteCond %{HTTP_REFERER} !www.example.com [NC]<br />
-RewriteRule <strong>\.(gif|jpg|png)$</strong> /images/go-away.png [R,NC]
-</code></p></div>
+<pre class="prettyprint lang-config">
+RewriteCond %{HTTP_REFERER} !^$
+RewriteCond %{HTTP_REFERER} !www.example.com [NC]
+RewriteRule \.(gif|jpg|png)$ /images/go-away.png [R,NC]
+</pre>
+
<p>Dans le troisième exemple, nous redirigeons la requête vers
une image appartenant à un autre site.</p>
+<pre class="prettyprint lang-config">
+RewriteCond %{HTTP_REFERER} !^$
+RewriteCond %{HTTP_REFERER} !www.example.com [NC]
+RewriteRule \.(gif|jpg|png)$ http://other.example.com/image.gif [R,NC]
+</pre>
+
-<div class="example"><p><code>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong><br />
-RewriteCond %{HTTP_REFERER} !www.example.com [NC]<br />
-RewriteRule <strong>\.(gif|jpg|png)$</strong> http://other.example.com/image.gif [R,NC]
-</code></p></div>
<p>De tous ces exemples, les deux derniers semblent les plus
efficaces pour faire en sorte que les gens arrêtent de
référencer vos images à chaud, car il ne verront pas les images
simplement interdire l'accès à la ressource, vous pouvez y
parvenir sans utiliser mod_rewrite :</p>
- <div class="example"><p><code>
- SetEnvIf Referer exemple\.com localreferer<br />
- <FilesMatch \.(jpg|png|gif)$><br />
- Order deny,allow<br />
- Deny from all<br />
- Allow from env=localreferer<br />
- </FilesMatch>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SetEnvIf Referer example\.com localreferer
+<FilesMatch \.(jpg|png|gif)$>
+ Require env localreferer
+</FilesMatch>
+ </pre>
+
</dd>
</dl>
<p>Notez qu'il existe des méthodes d'exclusion qui n'utilisent
pas mod_rewrite. Notez aussi que toute technique qui repose sur
le contenu de la chaîne client <code>USER_AGENT</code> peut être
- contournée très facilement car cette chaîne de caractères peut
- être modifiée.</p>
+ contournée très facilement car cette chaîne peut être modifiée.</p>
</dd>
<dt>Solution :</dt>
<dd>
<p>On utilise un jeu de règles qui spécifie le répertoire à
protéger, ainsi que la chaîne client <code>USER_AGENT</code> qui
- identifie le robot indésirable ou envahissant.</p>
+ identifie le robot malin ou envahissant.</p>
<p>Dans cet exemple, nous bloquons un robot nommé
<code>Vilain_Robot</code> pour le répertoire
seulement depuis une source particulière, vous pouvez aussi
spécifier un intervalle d'adresses IP.</p>
-<div class="example"><p><code>
-RewriteCond %{HTTP_USER_AGENT} ^<strong>Vilain_Robot</strong><br />
-RewriteCond %{REMOTE_ADDR} =<strong>123\.45\.67\.[8-9]</strong><br />
-RewriteRule ^<strong>/secret/fichiers/</strong> - [<strong>F</strong>]
-</code></p></div>
+<pre class="prettyprint lang-config">
+RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot
+RewriteCond %{REMOTE_ADDR} =123\.45\.67\.[8-9]
+RewriteRule ^/secret/files/ - [F]
+</pre>
+
</dd>
<dt>Discussion :</dt>
Vous pouvez cependant parvenir au même résultat sans utiliser
mod_rewrite via la méthode alternative suivante :
</p>
- <div class="example"><p><code>
- SetEnvIfNoCase User-Agent ^Vilain_Robot interdit<br />
- <Location /secret/fichiers><br />
- Order allow,deny<br />
- Allow from all<br />
- Deny from env=interdit<br />
- </Location>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SetEnvIfNoCase User-Agent ^NameOfBadRobot goaway
+<Location /secret/files>
+ <RequireAll>
+ Require all granted
+ Require not env goaway
+ </RequireAll>
+</Location>
+ </pre>
+
<p>
Comme indiqué plus haut, il est aisé de contourner cette
technique, simplement en modifiant le contenu de l'en-tête
<dt>Solution :</dt>
<dd>
-<div class="example"><p><code>
-RewriteEngine on<br />
-RewriteMap hosts-deny txt:/chemin/vers/hosts.deny<br />
-RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]<br />
-RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND<br />
+<pre class="prettyprint lang-config">
+RewriteEngine on
+RewriteMap hosts-deny txt:/path/to/hosts.deny
+RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
+RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^ - [F]
-</code></p></div>
+</pre>
+
<div class="example"><p><code>
##<br />
<p>Le jeu de règles suivant utilise un fichier de correspondances pour
associer chaque Referer à une cible de redirection.</p>
-<div class="example"><p><code>
-RewriteMap deflector txt:/chemin/vers/deflector.map<br />
-<br />
-RewriteCond %{HTTP_REFERER} !=""<br />
-RewriteCond ${deflector:%{HTTP_REFERER}} =-<br />
-RewriteRule ^ %{HTTP_REFERER} [R,L]<br />
-<br />
-RewriteCond %{HTTP_REFERER} !=""<br />
-RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND<br />
+<pre class="prettyprint lang-config">
+RewriteMap deflector txt:/path/to/deflector.map
+
+RewriteCond %{HTTP_REFERER} !=""
+RewriteCond ${deflector:%{HTTP_REFERER}} =-
+RewriteRule ^ %{HTTP_REFERER} [R,L]
+
+RewriteCond %{HTTP_REFERER} !=""
+RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^ ${deflector:%{HTTP_REFERER}} [R,L]
-</code></p></div>
+</pre>
+
<p>Le fichier de correspondances contient les cibles de
redirection associées à chaque Referer, ou, si nous voulons
simplement rediriger les requêtes vers leur Referer, un "-" est
inscrit dans le fichier de correspondances :</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
##<br />
## deflector.map<br />
##<br />
http://www.mauvais-gars.example.com/mauvais/index.html -<br />
http://www.mauvais-gars.example.com/mauvais/index2.html -<br />
http://www.mauvais-gars.example.com/mauvais/index3.html http://quelque-part.example.com/
-</code></p></div>
+</pre>
+
</dd>
</dl>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
-<title>Techniques avancées de réécriture avec mod_rewrite - Serveur Apache HTTP</title>
+<title>Advanced Techniques with mod_rewrite - Serveur Apache HTTP</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Techniques avancées de réécriture avec mod_rewrite</h1>
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Advanced Techniques with mod_rewrite</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/avoid.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document complète la <a href="../mod/mod_rewrite.html">documentation de référence</a> du
serveur par défaut qui sera utilisé lorsqu'un utilisateur ne
possèdera pas d'entrée dans la table de correspondances :</p>
-<div class="example"><p><code>
-RewriteEngine on<br />
-<br />
-RewriteMap utilisateurs-serveurs
-txt:/chemin/vers/correspondances-utilisateurs-serveurs<br />
-<br />
-RewriteRule ^/u/<strong>([^/]+)</strong>/?(.*) http://<strong>${utilisateurs-serveurs:$1|server0}</strong>/u/$1/$2
-</code></p></div>
+<pre class="prettyprint lang-config">
+RewriteEngine on
+RewriteMap users-to-hosts txt:/path/to/map.users-to-hosts
+RewriteRule ^/u/([^/]+)/?(.*) http://${users-to-hosts:$1|server0}/u/$1/$2
+</pre>
+
</dd>
</dl>
<dt>Solution :</dt>
<dd>
- À cet effet, on utilise le jeu de règles suivant :
+ A cet effet, on utilise le jeu de règles suivant :
-<div class="example"><p><code>
-# Cet exemple n'est valable que dans un contexte de répertoire<br />
-RewriteCond %{REQUEST_URI} <strong>!-U</strong><br />
+<pre class="prettyprint lang-config">
+# Cet exemple n'est valable que dans un contexte de répertoire
+RewriteCond %{REQUEST_URI} !-U
RewriteRule ^(.+)\.html$ /regenerate_page.cgi [PT,L]
-</code></p></div>
+</pre>
+
<p>L'opérateur <code>-U</code> permet de déterminer si la chaîne
de test (dans ce cas <code>REQUEST_URI</code>) est une URL valide.
<p>Pour y parvenir, nous allons utiliser la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> et une liste de
serveurs.</p>
-<div class="example"><p><code>
-RewriteEngine on<br />
-RewriteMap lb rnd:/chemin/vers/liste-serveurs.txt<br />
-<br />
+<pre class="prettyprint lang-config">
+RewriteEngine on
+RewriteMap lb rnd:/path/to/serverlist.txt
RewriteRule ^/(.*) http://${lb:serveurs}/$1 [P,L]
-</code></p></div>
+</pre>
+
<p><code>liste-serveurs.txt</code> contiendra la liste des serveurs :</p>
actualisée chaque fois que la ressource est mise à jour dans
le système de fichiers.</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^(/[uge]/[^/]+/?.*):refresh /interne/cgi/apache/nph-refresh?f=$
-</code></p></div>
+</pre>
+
<p>Nous appelons maintenant cette URL</p>
écrive habituellement dans ces cas "laissé à la charge du
lecteur à titre d'exercice", ;-) je vous l'offre, aussi.</p>
-<div class="example"><pre>
+<pre class="prettyprint lang-perl">
#!/sw/bin/perl
##
## nph-refresh -- script NPH/CGI pour l'actualisation automatique de
$| = 1;
# éclate la variable QUERY_STRING
-@pairs = split(/&/, $ENV{'QUERY_STRING'});
+@pairs = split( /&/, $ENV{'QUERY_STRING'} );
foreach $pair (@pairs) {
-($name, $value) = split(/=/, $pair);
-$name =~ tr/A-Z/a-z/;
-$name = 'QS_' . $name;
-$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
-eval "\$$name = \"$value\"";
+ ( $name, $value ) = split( /=/, $pair );
+ $name =~ tr/A-Z/a-z/;
+ $name = 'QS_' . $name;
+ $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+ eval "\$$name = \"$value\"";
}
-$QS_s = 1 if ($QS_s eq '');
-$QS_n = 3600 if ($QS_n eq '');
-if ($QS_f eq '') {
-print "HTTP/1.0 200 OK\n";
-print "Content-type: text/html\n\n";
-print "&lt;b&gt;ERREUR&lt;/b&gt;: Aucun fichier fourni\n";
-exit(0);
+$QS_s = 1 if ( $QS_s eq '' );
+$QS_n = 3600 if ( $QS_n eq '' );
+if ( $QS_f eq '' ) {
+ print "HTTP/1.0 200 OK\n";
+ print "Content-type: text/html\n\n";
+ print "<b>ERROR</b>: No file given\n";
+ exit(0);
}
-if (! -f $QS_f) {
-print "HTTP/1.0 200 OK\n";
-print "Content-type: text/html\n\n";
-print "&lt;b&gt;ERREUR&lt;/b&gt;: Fichier $QS_f non trouvé\n";
-exit(0);
+if ( !-f $QS_f ) {
+ print "HTTP/1.0 200 OK\n";
+ print "Content-type: text/html\n\n";
+ print "<b>ERROR</b>: File $QS_f not found\n";
+ exit(0);
}
sub print_http_headers_multipart_begin {
-print "HTTP/1.0 200 OK\n";
-$bound = "ThisRandomString12345";
-print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
-&print_http_headers_multipart_next;
+ print "HTTP/1.0 200 OK\n";
+ $bound = "ThisRandomString12345";
+ print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
+ &print_http_headers_multipart_next;
}
sub print_http_headers_multipart_next {
-print "\n--$bound\n";
+ print "\n--$bound\n";
}
sub print_http_headers_multipart_end {
-print "\n--$bound--\n";
+ print "\n--$bound--\n";
}
sub displayhtml {
-local($buffer) = @_;
-$len = length($buffer);
-print "Content-type: text/html\n";
-print "Content-length: $len\n\n";
-print $buffer;
+ local ($buffer) = @_;
+ $len = length($buffer);
+ print "Content-type: text/html\n";
+ print "Content-length: $len\n\n";
+ print $buffer;
}
sub readfile {
-local($file) = @_;
-local(*FP, $size, $buffer, $bytes);
-($x, $x, $x, $x, $x, $x, $x, $size) = stat($file);
-$size = sprintf("%d", $size);
-open(FP, "&lt;$file");
-$bytes = sysread(FP, $buffer, $size);
-close(FP);
-return $buffer;
+ local ($file) = @_;
+ local ( *FP, $size, $buffer, $bytes );
+ ( $x, $x, $x, $x, $x, $x, $x, $size ) = stat($file);
+ $size = sprintf( "%d", $size );
+ open( FP, "<$file" );
+ $bytes = sysread( FP, $buffer, $size );
+ close(FP);
+ return $buffer;
}
$buffer = &readfile($QS_f);
&displayhtml($buffer);
sub mystat {
-local($file) = $_[0];
-local($time);
+ local ($file) = $_[0];
+ local ($time);
-($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
-return $mtime;
+ ( $x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime ) = stat($file);
+ return $mtime;
}
$mtimeL = &mystat($QS_f);
-$mtime = $mtime;
-for ($n = 0; $n &lt; $QS_n; $n++) {
-while (1) {
- $mtime = &mystat($QS_f);
- if ($mtime ne $mtimeL) {
- $mtimeL = $mtime;
- sleep(2);
- $buffer = &readfile($QS_f);
- &print_http_headers_multipart_next;
- &displayhtml($buffer);
- sleep(5);
- $mtimeL = &mystat($QS_f);
- last;
+$mtime = $mtime;
+for ( $n = 0 ; $n & lt ; $QS_n ; $n++ ) {
+ while (1) {
+ $mtime = &mystat($QS_f);
+ if ( $mtime ne $mtimeL ) {
+ $mtimeL = $mtime;
+ sleep(2);
+ $buffer = &readfile($QS_f);
+ &print_http_headers_multipart_next;
+ &displayhtml($buffer);
+ sleep(5);
+ $mtimeL = &mystat($QS_f);
+ last;
+ }
+ sleep($QS_s);
}
- sleep($QS_s);
-}
}
&print_http_headers_multipart_end;
exit(0);
##EOF##
-</pre></div>
+</pre>
+
</dd>
</dl>
<p>On utilise le jeu de règles suivant pour développer les
URLs avec tilde selon l'organisation structurée précédente.</p>
-<div class="example"><p><code>
-RewriteEngine on<br />
+<pre class="prettyprint lang-config">
+RewriteEngine on
RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/public_html$3
-</code></p></div>
+</pre>
+
</dd>
</dl>
permettent d'effectuer des redirections dépendant de
l'heure :</p>
-<div class="example"><p><code>
-RewriteEngine on<br />
-RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700<br />
-RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900<br />
-RewriteRule ^foo\.html$ foo.jour.html [L]<br />
-RewriteRule ^foo\.html$ foo.nuit.html
-</code></p></div>
+<pre class="prettyprint lang-config">
++RewriteEngine on
++RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
++RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
++RewriteRule ^foo\.html$ foo.day.html [L]
+</pre>
+
<p>Avec cet exemple, l'URL <code>foo.html</code> renvoie
le contenu de <code>foo.jour.html</code> durant le
la fenêtre de temps configurée. On peut utiliser
<code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> pour contourner ce problème. Il est
cependant bien plus commode de servir un contenu dynamique, et
- de le personnaliser en fonction de l'heure du jour.</div> </dd>
+ de le personnaliser en fonction de l'heure du jour.</div>
+ </dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<p>Utiliser le drapeau [E] pour définir une variable
d'environnement.</p>
-<div class="example"><p><code>
-RewriteEngine on<br />
+<pre class="prettyprint lang-config">
+RewriteEngine on
RewriteRule ^/cheval/(.*) /poney/$1 [E=<strong>rewritten:1</strong>]
-</code></p></div>
+</pre>
+
<p>Plus loin dans votre jeu de règles, vous pouvez vérifier le
contenu de cette variable d'environnement via une directive
RewriteCond :</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteCond %{ENV:rewritten} =1
-</code></p></div>
+</pre>
+
</dd>
</dl>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
<p><span>Langues Disponibles: </span><a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/avoid.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">Documentation de référence</a> de
<p>Pour rediriger les URLs sous <code>/un</code> vers
<code>http://un.example.com/</code>, utilisez cette définition :</p>
-<div class="example"><p><code>
-Redirect /un/ http://un.example.com/
-</code></p></div>
+<pre class="prettyprint lang-config">Redirect /one/ http://one.example.com/</pre>
+
<p>Pour rediriger les URLs <code>http</code> vers <code>https</code>,
utilisez cette définition :</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
<VirtualHost *:80>
-ServerName www.example.com<br />
-Redirect / https://www.example.com/<br />
+ServerName www.example.com
+Redirect / https://www.example.com/
</VirtualHost >
-<br />
+
<VirtualHost *:443>
-ServerName www.example.com<br />
-<br />
-# ... insérer ici la configuration SSL<br />
+ServerName www.example.com
+# ... insérer ici la configuration SSL
</VirtualHost >
-</code></p></div>
+</pre>
+
<p>L'utilisation de la directive <code>RewriteRule</code> pour accomplir
cette tâche peut se justifier s'il existe d'autres directives
<code>mod_rewrite</code>, il est préférable d'utiliser la directive
<code>Alias</code> pour des raisons de simplicité et de performances.</p>
-<div class="example"><h3>Utilisation de la directive Alias</h3><p><code>
-Alias /chats /var/www/virtualhosts/felin/htdocs
-</code></p></div>
+<div class="example"><h3>Utilisation de la directive Alias</h3><pre class="prettyprint lang-config">Alias /cats
+/var/www/virtualhosts/felines/htdocs</pre>
+</div>
<p>
Pour effectuer cette mise en correspondance, <code>mod_rewrite</code>
<p>L'utilisation de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour la création de
serveurs virtuels peut se révéler appropriée si votre service
d'hébergement ne vous permet pas d'accéder aux fichiers de configuration
-du serveur, et que vous vous trouvez par conséquent obligé de passer par les
+du serveur, et que vous soyez par conséquent obligé de passer par les
fichiers <code>.htaccess</code>.</p>
<p>Voir le document <a href="vhosts.html">création de serveurs virtuels
<p>La directive <code>RewriteRule</code> fournit le drapeau <a href="flags.html#flag_p">[P]</a> qui permet de faire passer les URIs
réécrits par <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>.</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^/?images(.*) http://serveur-images.local/images$1 [P]
-</code></p></div>
+</pre>
+
<p>Cependant, dans les nombreux cas où aucune correspondance au modèle
n'est vraiment nécessaire, comme dans l'exemple ci-dessus, il est
préférable d'utiliser la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. L'exemple précédent pourrait
être remplacé par :</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
ProxyPass /images/ http://serveur-images.local/images/
-</code></p></div>
+</pre>
+
<p>Que vous utilisiez <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ou <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>, vous devrez dans tous les cas
utiliser aussi la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> pour intercepter les
redirections en provenance du serveur d'arrière-plan :</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
ProxyPassReverse /images/ http://serveur-images.local/images/
-</code></p></div>
+</pre>
+
<p>Vous devrez cependant tout de même utiliser <code>RewriteRule</code>
lorsque d'autres <code>RewriteRule</code>s se trouvent dans la même portée,
directive <code class="directive"><a href="../mod/core.html#if"><If></a></code> comme
suit :</p>
-<div class="example"><p><code>
-<If "$req{Host} != 'www.example.com'"><br />
-RedirectMatch (.*) http://www.example.com$1<br />
+<pre class="prettyprint lang-config">
+<If "req('Host') != 'www.example.com'">
+ Redirect / http://www.example.com
</If>
-</code></p></div>
+</pre>
+
-<p>On peut utiliser cette technique dans de nombreux scénarios courants
-en remplacement de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour effectuer des actions
+<p>On peut utiliser cette technique dans de nombreux scénarios courant
+pour remplacer <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour effectuer des actions
en fonction d'en-têtes de requêtes ou de réponses, ou de variables
d'environnement.</p>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
<p><span>Langues Disponibles: </span><a href="../en/rewrite/flags.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/flags.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document décrit les drapeaux disponibles dans la directive
<code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, en fournissant
<p>Le comportement d'une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> peut être modifié par un ou
plusieurs drapeaux. Les drapeaux sont situés en fin de règle, entourés
de crochets, et séparés le cas échéant par des virgules.</p>
-<div class="example"><p><code>
-RewriteRule modèle cible [drapeau1,drapeau2,drapeau3]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule pattern target [Flag1,Flag2,Flag3]</pre>
+
<p>Les drapeaux ont tous une forme courte, comme <code>CO</code>, ainsi
qu'une forme longue, comme <code>cookie</code>. Certains drapeaux
non-alphanumériques des références arrières seront échappés. Considérons
par exemple cette règle :</p>
-<div class="example"><p><code>
-RewriteRule ^search/(.*)$ /search.php?term=$1
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule ^search/(.*)$ /search.php?term=$1</pre>
+
<p>Soit le terme de recherche 'x & y/z' ; un navigateur va le coder
en 'x%20%26%20y%2Fz', transformant la requête en
<p>Voici un exemple :</p>
-<div class="example"><p><code>
-RewriteEngine On<br />
+<pre class="prettyprint lang-config">
+RewriteEngine On
RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.org:1440:/]
-</code></p></div>
+</pre>
+
<p>Dans l'exemple ci-dessus, la règle ne réécrit
pas la requête. La cible de réécriture "-"
<p>La règle suivante va interdire la téléchargement de fichiers
<code>.exe</code> depuis votre serveur.</p>
-<div class="example"><p><code>
-RewriteRule \.exe - [F]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule \.exe - [F]</pre>
+
<p>Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce
qui signifie que l'URI de la requête n'est pas modifié. Il n'y a aucune
<p>Comme dans le cas du drapeau [F], on utilise en général la syntaxe
"-" pour la cible de réécriture lorsqu'on utilise le drapeau [G] :</p>
-<div class="example"><p><code>
-RewriteRule ancienne-ressource - [G,NC]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule oldproduct - [G,NC]</pre>
+
<p>Lorsqu'on utilise [G], [L] est implicite - c'est à dire que la
réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.</p>
l'interprétation de tous les fichiers sans extension par le gestionnaire
php :</p>
-<div class="example"><p><code>
-RewriteRule !\. - [H=application/x-httpd-php]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule !\. -
+[H=application/x-httpd-php]</pre>
+
<p>
L'expression rationnelle ci-dessus - <code>!\.</code> - correspond à
<em>affichés</em> par <code>mod_php</code> dans le cas où ils font
l'objet d'une requête avec l'extension <code>.phps</code> :</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
-</code></p></div>
+</pre>
+
<p>L'expression rationnelle ci-dessus -
directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> permet de s'assurer que si
la requête concerne déjà <code>index.php</code>, la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> sera sautée.</p>
-<div class="example"><p><code>
-RewriteBase /<br />
-RewriteCond %{REQUEST_URI} !=/index.php<br />
+<pre class="prettyprint lang-config">
+RewriteBase /
+RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*) /index.php?req=$1 [L,PT]
-</code></p></div>
+</pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_n" id="flag_n">N|next</a></h2>
ceci jusqu'il n'y ait plus de A à remplacer.
</p>
-<div class="example"><p><code>
-RewriteRule (.*)A(.*) $1B$2 [N]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule (.*)A(.*) $1B$2 [N]</pre>
+
<p>Vous pouvez vous représenter ce traitement comme une boucle
<code>while</code> : tant que le modèle de la règle correspond (c'est à
insensible à la casse, si bien que par exemple, <code>.jpg</code> aussi
bien que <code>.JPG</code> seront acceptés.</p>
-<div class="example"><p><code>
-RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]</pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="flag_ne" id="flag_ne">NE|noescape</a></h2>
hexadécimal. Le drapeau [NE] permet d'éviter cette conversion.
</p>
-<div class="example"><p><code>
-RewriteRule ^/ancre/(.+) /grosse-page.html#$1 [NE,R]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]</pre>
+
<p>
Dans l'exemple ci-dessus, <code>/anchor/xyz</code> est réécrit en
soient traitées par un serveur d'images annexe, vous pouvez utiliser
une règle de ce style :</p>
-<div class="example"><p><code>
-RewriteRule /(.*)\.(jpg|gif|png) http://images.example.com/$1.$2 [P]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule /(.*)\.(jpg|gif|png)$ http://images.example.com/$1.$2 [P]</pre>
+
<p>L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] -
autrement dit, la requête est immédiatement envoyée au mandataire, et
vous devez utiliser le drapeau [PT] pour être sûr que l'<code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> sera bien évalué.
</p>
-<div class="example"><p><code>
-Alias /icons /usr/local/apache/icons<br />
-RewriteRule /pics/(.+)\.jpg /icons/$1.gif [PT]
-</code></p></div>
+<pre class="prettyprint lang-config">
+Alias /icons /usr/local/apache/icons
+RewriteRule /pics/(.+)\.jpg$ /icons/$1.gif [PT]
+</pre>
+
<p>
Dans l'exemple précédent, en l'absence du drapeau [PT], l'Alias aurait
<p>Considérons la règle suivante :</p>
-<div class="example"><p><code>
-RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
-</code></p></div>
+<pre class="prettyprint lang-config">RewriteRule /pages/(.+) /page.php?page=$1
+[QSA]</pre>
+
<p>Avec le drapeau [QSA], une requête pour
<code>/pages/123?one=two</code> sera réécrite en
<code>goto</code> dans votre jeu de règles de réécriture. Dans
l'exemple suivant, nous ne voulons exécuter la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> que si l'URI demandé ne
correspond pas à un fichier existant.</p>
-
-<div class="example"><p><code>
-# La requête concerne-t-elle un fichier qui n'existe pas ?<br />
-RewriteCond %{REQUEST_FILENAME} !-f<br />
-RewriteCond %{REQUEST_FILENAME} !-d<br />
-# Si c'est la cas, on saute les deux règles de réécriture suivantes<br />
-RewriteRule .? - [S=2]<br />
-<br />
-RewriteRule (.*\.gif) images.php?$1<br />
+<pre class="prettyprint lang-config">
+# La requête concerne-t-elle un fichier qui n'existe pas ?
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+# Si c'est la cas, on saute les deux règles de réécriture suivantes
+RewriteRule .? - [S=2]
+
+RewriteRule (.*\.gif) images.php?$1
RewriteRule (.*\.html) docs.php?$1
-</code></p></div>
+</pre>
+
+
+
<p>Cette technique trouve son utilité dans le fait qu'une directive
<code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> ne s'applique
d'élaborer des pseudo-constructions if-then-else : la dernière règle du
bloc then contiendra <code>skip=N</code>, où N est le nombre de règles
contenues dans le bloc else :</p>
-<div class="example"><p><code>
-# Est-ce que le fichier existe ?<br />
-RewriteCond %{REQUEST_FILENAME} !-f<br />
-RewriteCond %{REQUEST_FILENAME} !-d<br />
+<pre class="prettyprint lang-config">
+# Est-ce que le fichier existe ?
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+# Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.
+RewriteRule .? - [S=3]
-# Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.<br />
-RewriteRule .? - [S=3]<br />
-<br />
# Si le fichier existe, alors :
-<span class="indent">
- RewriteRule (.*\.gif) images.php?$1<br />
- RewriteRule (.*\.html) docs.php?$1<br />
- # Skip past the "else" stanza.<br />
- RewriteRule .? - [S=1]<br />
-</span>
+RewriteRule (.*\.gif) images.php?$1
+ RewriteRule (.*\.html) docs.php?$1
+ # Skip past the "else" stanza.
+ RewriteRule .? - [S=1]
# ELSE...
-<span class="indent">
- RewriteRule (.*) 404.php?file=$1<br />
-</span>
+RewriteRule (.*) 404.php?file=$1
# END
-</code></p></div>
+</pre>
+
<p>Il est probablement plus aisé de définir ce genre de configuration
via les directives <code class="directive"><If></code>, <code class="directive"><ElseIf></code>, et <code class="directive"><Else></code>.</p>
du code source Perl en tant que plein texte, s'il est requis d'une
certaine manière :</p>
-<div class="example"><p><code>
-# Sert les fichier .pl en tant que plein texte<br />
+<pre class="prettyprint lang-config">
+# Sert les fichier .pl en tant que plein texte
RewriteRule \.pl$ - [T=text/plain]
-</code></p></div>
+</pre>
+
<p>Ou encore, si vous possédez une caméra qui produit des fichiers
images jpeg sans extension, vous pouvez forcer le renvoi de ces images
avec le type MIME correct en se basant sur le nom du fichier :</p>
-<div class="example"><p><code>
-# Les fichiers dont le nom contient 'IMG' sont des images jpg.<br />
+<pre class="prettyprint lang-config">
+# Les fichiers dont le nom contient 'IMG' sont des images jpg.
RewriteRule IMG - [T=image/jpg]
-</code></p></div>
+</pre>
+
<p>Notez cependant qu'il s'agit d'un exemple trivial, et que le problème
aurait pu être résolu en utilisant à la place la directive <code class="directive"><a href="../mod/core.html#filesmatch"><FilesMatch></a></code>. Il faut toujours
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
<p><span>Langues Disponibles: </span><a href="../en/rewrite/intro.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/intro.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">documentation de référence</a> du module
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Il décrit les concepts de base dont la
<li><var>[drapeaux]</var>: options affectant la requête réécrite.</li>
</ol>
-<p>Le <var>Modèle</var> est toujours une <a href="#regex">expression
-rationnelle</a> comparée au chemin de l'URL de la requête entrante (la
+<p>Le <var>Modèle</var> est une <a href="#regex">expression
+rationnelle</a>. Au sein de la première règle de réécriture, ou jusqu'à
+ce qu'une substitution survienne, elle est comparée au chemin de
+l'URL de la requête entrante (la
partie située après le nom d'hôte mais avant tout point d'interrogation
qui indique le début d'une chaîne de paramètres de
requête) ou, dans un contexte de répertoire, au chemin de la
-requête relativement au répertoire pour lequel la règle est définie..</p>
+requête relativement au répertoire pour lequel la
+règle est définie. Lorsqu'une substitution a eu lieu, les
+règles suivantes effectuent leurs comparaisons par rapport à la valeur
+substituée.</p>
<p class="figure">
<img src="../images/syntax_rewriterule.png" alt="Syntaxe de la directive RewriteRule" /><br />
<dl>
<dt>Un chemin complet du système de fichiers vers une ressource</dt>
<dd>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^/jeux /usr/local/jeux/web
-</code></p></div>
+</pre>
+
<p>Ceci peut faire correspondre une requête à toute localisation voulue de
votre système de fichiers, un peu comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>.</p>
</dd>
<dt>Un chemin web vers une ressource</dt>
<dd>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^/foo$ /bar
-</code></p></div>
+</pre>
+
<p>Si la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> a
pour valeur <code>/usr/local/apache2/htdocs</code>, cette règle va faire
correspondre les requêtes pour <code>http://example.com/foo</code> au
<dt>Une URL absolue</dt>
<dd>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^/produits/vues$ http://site2.example.com/voirproduits.html [R]
-</code></p></div>
+</pre>
+
<p>Ceci informe le client qu'il doit effectuer une nouvelle requête vers
l'URL spécifiée.</p>
</dd>
<p>La chaîne de <var>Substitution</var> peut aussi contenir des
<em>références arrières</em> vers des parties du chemin d'URL entrant
correspondant au <var>Modèle</var>. Considérons ce qui suit :</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^/produits/(.*)/view$ /var/web/produitsdb/$1
-</code></p></div>
+</pre>
+
<p>La variable <code>$1</code> sera remplacée par tout texte
correspondant à l'expression située entre les parenthèses dans le
<var>Modèle</var>. Par exemple, une requête pour
conditions de correspondance d'une règle peuvent être rendues
insensibles à la casse par la présence du drapeau <code>[NC]</code> :
</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
RewriteRule ^puppy.html petitchien.html [NC]
-</code></p></div>
+</pre>
+
<p>Pour une liste des drapeaux disponibles, leurs significations, et des
exemples, voir le document <a href="flags.html">Drapeaux de
<p>Par exemple, pour renvoyer toutes les requêtes en provenance d'une
certaine tranche d'adresses IP vers un autre serveur, vous pouvez
utiliser :</p>
-<div class="example"><p><code>
-RewriteCond %{REMOTE_ADDR} ^10\.2\.<br />
+<pre class="prettyprint lang-config">
+RewriteCond %{REMOTE_ADDR} ^10\.2\.
RewriteRule (.*) http://intranet.example.com$1
-</code></p></div>
+</pre>
+
<p>Si vous spécifiez plus d'une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>, ces directives
doivent toutes être satisfaites pour que la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> suivante s'applique. Par exemple,
pour interdire les requêtes qui contiennent le mot "hack" dans la chaîne
de requête, sauf si elles contiennent aussi un cookie contenant le mot
"go", vous pouvez utiliser :</p>
-<div class="example"><p><code>
-RewriteCond %{QUERY_STRING} hack<br />
-RewriteCond %{HTTP_COOKIE} !go<br />
+<pre class="prettyprint lang-config">
+RewriteCond %{QUERY_STRING} hack
+RewriteCond %{HTTP_COOKIE} !go
RewriteRule . - [F]
-</code></p></div>
+</pre>
+
<p>Notez que le point d'exclamation indique une correspondance négative
; ainsi, la règle n'est appliquée que si le cookie ne contient pas "go"</p>
les variables <code>%1</code>, <code>%2</code>, etc... Par
exemple, ce qui suit va diriger la requête vers un répertoire différent
en fonction du nom d'hôte utilisé pour accéder au site :</p>
-<div class="example"><p><code>
-RewriteCond %{HTTP_HOST} (.*)<br />
+<pre class="prettyprint lang-config">
+RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/(.*) /sites/%1/$1
-</code></p></div>
+</pre>
+
<p>Si la requête concernait <code>http://example.com/foo/bar</code>,
alors <code>%1</code> contiendrait <code>example.com</code> et
<code>$1</code> contiendrait <code>foo/bar</code>.</p>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/sections.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Les directives des <a href="configuring.html">fichiers de configuration</a> peuvent s'appliquer
au serveur dans son ensemble, ou seulement à des répertoires, fichiers, hôtes,
ou URLs particuliers. Ce document décrit comment utiliser les conteneurs de
<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Hôtes virtuels</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#proxy">Mandataire</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#whatwhere">Quelles sont les directives autorisées ?</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#mergin">Comment les sections sont combinées entre elles</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#merging">Comment les sections sont combinées entre elles</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
un autre site si le serveur est démarré en utilisant la ligne de commande :
<code>httpd -DClosedForNow</code>:</p>
-<div class="example"><p><code>
-<IfDefine ClosedForNow><br />
-Redirect / http://otherserver.example.com/<br />
+<pre class="prettyprint lang-config">
+<IfDefine ClosedForNow>
+ Redirect / http://otherserver.example.com/
</IfDefine>
-</code></p></div>
+</pre>
+
<p>Le conteneur <code class="directive"><a href="./mod/core.html#ifmodule"><IfModule></a></code>
est similaire; les directives qu'il contient ne s'appliqueront que si
<p>Dans l'exemple suivant, la directive <code class="directive"><a href="./mod/mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></code> ne s'appliquera que si le
module <code class="module"><a href="./mod/mod_mime_magic.html">mod_mime_magic</a></code> est disponible.</p>
-<div class="example"><p><code>
-<IfModule mod_mime_magic.c><br />
-MimeMagicFile conf/magic<br />
+<pre class="prettyprint lang-config">
+<IfModule mod_mime_magic.c>
+ MimeMagicFile conf/magic
</IfModule>
-</code></p></div>
+</pre>
+
<p>Le conteneur
<code class="directive"><a href="./mod/mod_version.html#ifversion"><IfVersion></a></code>
et les grands réseaux qui doivent prendre en compte différentes versions
et configurations de httpd.</p>
-<div class="example"><p><code>
- <IfVersion >= 2.1><br />
- <span class="indent">
+<pre class="prettyprint lang-config">
+<IfVersion >= 2.4>
# les directives situées ici ne s'appliquent que si la version <br />
- # est supérieure ou égale à 2.1.0.<br />
- </span>
- </IfVersion>
-</code></p></div>
+ # est supérieure ou égale à 2.4.0.
+</IfVersion>
+</pre>
+
<p><code class="directive"><a href="./mod/core.html#ifdefine"><IfDefine></a></code>,
<code class="directive"><a href="./mod/core.html#ifmodule"><IfModule></a></code>, et
configuration suivante, l'indexation sera activée pour le répertoire
<code>/var/web/dir1</code> et tous ses sous-répertoires.</p>
-<div class="example"><p><code>
-<Directory /var/web/dir1><br />
-Options +Indexes<br />
+<pre class="prettyprint lang-config">
+<Directory /var/web/dir1>
+ Options +Indexes
</Directory>
-</code></p></div>
+</pre>
+
<p>Les directives contenues dans une section <code class="directive"><a href="./mod/core.html#files"><Files></a></code> s'appliquent à tout fichier
avec le nom spécifié, quel que soit le répertoire dans lequel il se trouve.
l'accès à tout fichier nommé <code>private.html</code> quel que soit
l'endroit où il se trouve.</p>
-<div class="example"><p><code>
-<Files private.html><br />
-Order allow,deny<br />
-Deny from all<br />
+<pre class="prettyprint lang-config">
+<Files private.html>
+ Require all denied
</Files>
-</code></p></div>
+</pre>
+
<p>Pour faire référence à des fichiers qui se trouvent en des points
particuliers du système de fichiers, les sections
<code>private.html</code> qui se trouve dans l'arborescence
<code>/var/web/dir1/</code>.</p>
-<div class="example"><p><code>
-<Directory /var/web/dir1><br />
-<Files private.html><br />
-Order allow,deny<br />
-Deny from all<br />
-</Files><br />
+<pre class="prettyprint lang-config">
+<Directory /var/web/dir1>
+ <Files private.html>
+ Require all denied
+ </Files>
</Directory>
-</code></p></div>
+</pre>
+
<h3><a name="webspace" id="webspace">Conteneurs de l'arborescence du site web</a></h3>
<code>http://yoursite.example.com/private/dir/file.html</code> ainsi qu'à
toute requête commençant par la chaîne de caractères <code>/private</code>.</p>
-<div class="example"><p><code>
-<LocationMatch ^/private><br />
-Order Allow,Deny<br />
-Deny from all<br />
+<pre class="prettyprint lang-config">
+<LocationMatch ^/private>
+ Require all denied
</Location>
-</code></p></div>
+</pre>
+
<p>Le conteneur <code class="directive"><a href="./mod/core.html#location"><Location></a></code>
n'a pas besoin de faire référence à un élément du système de fichiers.
Il n'est pas nécessaire de trouver un fichier nommé <code>server-status</code>
dans le système de fichiers.</p>
-<div class="example"><p><code>
-<Location /server-status><br />
-SetHandler server-status<br />
+<pre class="prettyprint lang-config">
+<Location /server-status>
+ SetHandler server-status
</Location>
-</code></p></div>
+</pre>
+
<h3><a name="overlapping-webspace" id="overlapping-webspace">Espace web imbriqué</a></h3>
dans lequel certaines sections ou directives sont évaluées. Pour
<code class="directive"><a href="./mod/core.html#location"><Location></a></code>, on doit
avoir :</p>
-<div class="example"><p><code>
-<Location /foo><br />
-</Location><br />
-<Location /foo/bar><br />
+<pre class="prettyprint lang-config">
+<Location /foo>
</Location>
-</code></p></div>
+<Location /foo/bar>
+</Location>
+</pre>
+
<p>Les directives <code class="directive"><a href="./mod/mod_alias.html#alias"><Alias></a></code>, quant à elles, sont évaluées vice-versa :</p>
-<div class="example"><p><code>
-Alias /foo/bar /srv/www/uncommon/bar<br />
-Alias /foo /srv/www/common/foo<br />
-</code></p></div>
+<pre class="prettyprint lang-config">
+Alias /foo/bar /srv/www/uncommon/bar
+Alias /foo /srv/www/common/foo
+</pre>
+
<p>Ceci est aussi vrai pour les directives <code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code> :</p>
-<div class="example"><p><code>
-ProxyPass /special-area http://special.example.com smax=5 max=10<br />
+<pre class="prettyprint lang-config">
+ProxyPass /special-area http://special.example.com smax=5 max=10
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On
-</code></p></div>
+</pre>
+
mais sans utiliser
les expressions rationnelles pourrait ressembler à ceci :</p>
-<div class="example"><p><code>
-<Directory /home/*/public_html><br />
-Options Indexes<br />
+<pre class="prettyprint lang-config">
+<Directory /home/*/public_html>
+ Options Indexes
</Directory>
-</code></p></div>
+</pre>
+
<p>Avec les conteneurs utilisant les expressions rationnelles,
on peut interdire l'accès à de nombreux types de fichiers d'images
simultanément :</p>
-<div class="example"><p><code>
-<FilesMatch \.(?i:gif|jpe?g|png)$><br />
-Order allow,deny<br />
-Deny from all<br />
+<pre class="prettyprint lang-config">
++<FilesMatch \.(?i:gif|jpe?g|png)$>
+ Require all denied
</FilesMatch>
-</code></p></div>
+</pre>
+
être définie sous la forme d'une expression booléenne. Dans l'exemple
suivant, l'accès est interdit si l'en-tête HTTP Referer ne commence pas
par "http://www.example.com/".</p>
-<div class="example"><p><code>
-<If "!(%{HTTP_REFERER} -strmatch 'http://www.example.com/*')"><br />
-Require all denied<br />
+<pre class="prettyprint lang-config">
+<If "!(%{HTTP_REFERER} -strmatch 'http://www.example.com/*')">
+ Require all denied
</If>
-</code></p></div>
+</pre>
+
du système de fichier, ce qui peut permettre de contourner vos restrictions.
Par exemple, imaginez la configuration suivante :</p>
-<div class="example"><p><code>
-<Location /dir/><br />
-Order allow,deny<br />
-Deny from all<br />
+<pre class="prettyprint lang-config">
+<Location /dir/>
+ Require all denied
</Location>
-</code></p></div>
+</pre>
+
<p>Elle fonctionne correctement si la requête appelle
<code>http://yoursite.example.com/dir/</code>. Mais que va-t-il se passer si
va interdire l'utilisation du serveur proxy pour accéder au site
<code>www.example.com</code>.</p>
-<div class="example"><p><code>
-<Proxy http://www.example.com/*><br />
-Order allow,deny<br />
-Deny from all<br />
+<pre class="prettyprint lang-config">
+<Proxy http://www.example.com/*>
+ Require all granted
</Proxy>
-</code></p></div>
+</pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="whatwhere" id="whatwhere">Quelles sont les directives autorisées ?</a></h2>
</ul>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
-<h2><a name="mergin" id="mergin">Comment les sections sont combinées entre elles</a></h2>
+<h2><a name="merging" id="merging">Comment les sections sont combinées entre elles</a></h2>
<p>Les sections de configuration sont appliquées dans un ordre très particulier.
Il est important de savoir comment cet ordre est défini car il peut avoir
cet exemple seront appliquées dans l'ordre suivant : A > B > C > D >
E.</p>
-<div class="example"><p><code>
-<Location /><br />
-E<br />
-</Location><br />
-<br />
-<Files f.html><br />
-D<br />
-</Files><br />
-<br />
-<VirtualHost *><br />
-<Directory /a/b><br />
-B<br />
-</Directory><br />
-</VirtualHost><br />
-<br />
-<DirectoryMatch "^.*b$"><br />
-C<br />
-</DirectoryMatch><br />
-<br />
-<Directory /a/b><br />
-A<br />
-</Directory><br />
-<br />
-</code></p></div>
+<pre class="prettyprint lang-config">
+<Location />
+ E
+</Location>
+
+<Files f.html>
+ D
+</Files>
+
+<VirtualHost *>
+<Directory /a/b>
+ B
+</Directory>
+</VirtualHost>
+
+<DirectoryMatch "^.*b$">
+ C
+</DirectoryMatch>
+
+<Directory /a/b>
+ A
+</Directory>
+
+</pre>
+
<p>Pour un exemple plus concret, considérez ce qui suit. Sans tenir compte
de toute restriction d'accès placée dans les sections <code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>, la section <code class="directive"><a href="./mod/core.html#location"><Location></a></code> sera
En d'autres termes, l'ordre de la combinaison des sections est important,
soyez donc prudent !</p>
-<div class="example"><p><code>
-<Location /><br />
-Order deny,allow<br />
-Allow from all<br />
-</Location><br />
-<br />:if expand("%") == ""|browse confirm w|else|confirm w|endif
-
-# Arrghs! Cette section <Directory> n'aura aucun effet<br />
-<Directory /><br />
-Order allow,deny<br />
-Allow from all<br />
-Deny from badguy.example.com<br />
+<pre class="prettyprint lang-config">
+<Location />
+ Require all granted
+</Location>
+
+# Arrghs! Cette section <Directory> n'aura aucun effet
+<Directory />
+ <RequireAll>
+ Require all granted
+ Require not host badguy.example.com
+ </RequireAll>
</Directory>
-</code></p></div>
+</pre>
+
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<p><span>Langues Disponibles: </span><a href="../en/ssl/ssl_faq.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/ssl/ssl_faq.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<blockquote>
<p>Le sage n'apporte pas de bonnes réponses, il pose les bonnes questions</p>
hyperliens pleinement qualifiés (car vous devez modifier le schéma de l'URL).
Cependant, à l'aide du module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, vous pouvez
manipuler des hyperliens relatifs, pour obtenir le même effet.</p>
- <div class="example"><p><code>
- RewriteEngine on<br />
- RewriteRule ^/(.*)_SSL$ https://%{SERVER_NAME}/$1 [R,L]<br />
- RewriteRule ^/(.*)_NOSSL$ http://%{SERVER_NAME}/$1 [R,L]
- </code></p></div>
+ <pre class="prettyprint lang-config">
+RewriteEngine on
+RewriteRule ^/(.*)_SSL$ https://%{SERVER_NAME}/$1 [R,L]
+RewriteRule ^/(.*)_NOSSL$ http://%{SERVER_NAME}/$1 [R,L]
+ </pre>
+
<p>Ce jeu de règles rewrite vous permet d'utiliser des hyperliens de la
forme <code><a href="document.html_SSL"></code> pour passer en HTTPS
-keyout server.key</strong></code><br />
Ces fichiers seront utilisés comme suit dans votre
<code>httpd.conf</code> :
- <pre>
- SSLCertificateFile /chemin/vers/server.crt
- SSLCertificateKeyFile /chemin/vers/server.key
- </pre>
+ <pre class="prettyprint lang-config">
+SSLCertificateFile /path/to/this/server.crt
+SSLCertificateKeyFile /path/to/this/server.key
+ </pre>
+
</li>
<li>Il est important de savoir que le fichier <code>server.key</code> n'a
<em>pas</em> de mot de passe. Pour ajouter un mot de passe à la clé, vous
<li>Vous devez maintenant disposer de deux fichiers :
<code>server.key</code> et <code>server.crt</code>. Ils sont précisés dans
votre fichier <code>httpd.conf</code> comme suit :
- <pre>
- SSLCertificateFile /chemin/vers/server.crt
- SSLCertificateKeyFile /chemin vers/server.key
+ <pre class="prettyprint lang-config">
+SSLCertificateFile /path/to/this/server.crt
+SSLCertificateKeyFile /path/to/this/server.key
</pre>
+
Le fichier <code>server.csr</code> n'est plus nécessaire.
</li>
(sur le port 443). Mais dans ce cas, vous devez définir le numéro de port
non-SSL à l'aide de la directive NameVirtualHost dans ce style :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
NameVirtualHost 192.168.1.1:80
- </code></p></div>
+ </pre>
+
<p>il existe d'autres solutions alternatives comme :</p>
ou l'envoi de messages de notification de fermeture de session SSL aux
clients MSIE. Pour cela, vous pouvez utiliser la directive suivante
dans votre section d'hôte virtuel avec support SSL :</p>
- <div class="example"><p><code>
- SetEnvIf User-Agent "MSIE [2-5]" \<br />
- nokeepalive ssl-unclean-shutdown \<br />
- downgrade-1.0 force-response-1.0
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SetEnvIf User-Agent "MSIE [2-5]" \
+ nokeepalive ssl-unclean-shutdown \
+ downgrade-1.0 force-response-1.0
+ </pre>
+
<p>En outre, certaines versions de MSIE ont des problèmes avec des
algorithmes de chiffrement particuliers. Hélas, il n'est pas
possible d'apporter une solution spécifique à MSIE pour ces
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
<p><span>Langues Disponibles: </span><a href="../en/ssl/ssl_howto.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/ssl/ssl_howto.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document doit vous permettre de démarrer et de faire fonctionner
<p>Votre configuration SSL doit comporter au moins les directives
suivantes :</p>
-<div class="example"><p><code>
- Listen 443
- <VirtualHost *:443><br />
- <span class="indent">
- ServerName www.example.com<br />
- SSLEngine on<br />
- SSLCertificateFile /chemin/vers/www.example.com.cert<br />
- SSLCertificateKeyFile /chemin/vers/www.example.com.key<br />
- </span>
- </VirtualHost>
-</code></p></div>
+<pre class="prettyprint lang-config">
+Listen 443
+<VirtualHost *:443>
+ ServerName www.example.com
+ SSLEngine on
+ SSLCertificateFile /path/to/www.example.com.cert
+ SSLCertificateKeyFile /path/to/www.example.com.key
+</VirtualHost>
+</pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<p>Les directives suivantes ne permettent que les
chiffrements de plus haut niveau :</p>
- <div class="example"><h3>httpd.conf</h3><p><code>
- SSLCipherSuite HIGH:!aNULL:!MD5<br />
- </code></p></div>
+ <pre class="prettyprint lang-config">
+ SSLCipherSuite HIGH:!aNULL:!MD5
+ </pre>
+
rapidité (le choix final sera opéré par mod_ssl, dans la mesure ou le
client les supporte) :</p>
- <div class="example"><h3>httpd.conf</h3><p><code>
- SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!aNULL:!MD5<br />
- SSLHonorCipherOrder on
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!aNULL:!MD5
+SSLHonorCipherOrder on
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="strongurl" id="strongurl">Comment créer un serveur qui accepte tous les types de
<code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> peut alors forcer automatiquement une
renégociation des paramètres SSL pour parvenir au but recherché.
Cette configuration peut se présenter comme suit :</p>
- <div class="example"><p><code>
- # soyons très tolérant a priori<br />
- SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL<br />
- <br />
- <Location /strong/area><br />
- # sauf pour https://hostname/strong/area/ et ses sous-répertoires<br />
- # qui exigent des chiffrements forts<br />
- SSLCipherSuite HIGH:!aNULL:!MD5<br />
- </Location>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+# soyons très tolérant a priori
+SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
+
+<Location /strong/area>
+# sauf pour https://hostname/strong/area/ et ses sous-répertoires
+# qui exigent des chiffrements forts
+SSLCipherSuite HIGH:!aNULL:!MD5
+</Location>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="accesscontrol" id="accesscontrol">Authentification du client et contrôle d'accès</a></h2>
le certificat de votre propre autorité de certification
(<code>ca.crt</code>), et d'authentifier les clients à l'aide de ces
certificats.</p>
- <div class="example"><h3>httpd.conf</h3><p><code>
- # exige un certificat client signé par le certificat de votre CA<br />
- # contenu dans ca.crt<br />
- SSLVerifyClient require<br />
- SSLVerifyDepth 1<br />
- SSLCACertificateFile conf/ssl.crt/ca.crt
- </code></p></div>
+ <pre class="prettyprint lang-config">
+# exige un certificat client signé par le certificat de votre CA
+# contenu dans ca.crt
+SSLVerifyClient require
+SSLVerifyDepth 1
+SSLCACertificateFile conf/ssl.crt/ca.crt
+ </pre>
+
<h3><a name="arbitraryclients" id="arbitraryclients">Comment forcer les clients
URL particulière, vous pouvez utiliser les fonctionnalités de reconfiguration
de <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en fonction du répertoire :</p>
- <div class="example"><h3>httpd.conf</h3><p><code>
- SSLVerifyClient none<br />
- SSLCACertificateFile conf/ssl.crt/ca.crt<br />
- <br />
- <Location /secure/area><br />
- SSLVerifyClient require<br />
- SSLVerifyDepth 1<br />
- </Location><br />
- </code></p></div>
+ <pre class="prettyprint lang-config">
+SSLVerifyClient none
+SSLCACertificateFile conf/ssl.crt/ca.crt
+
+<Location /secure/area>
+SSLVerifyClient require
+SSLVerifyDepth 1
+</Location>
+ </pre>
+
<h3><a name="certauthenticate" id="certauthenticate">Comment n'autoriser l'accès à une URL
de données de mots de passe contenant <em>tous</em> les clients
autorisés, comme suit :</p>
- <div class="example"><h3>httpd.conf</h3><pre>
+ <pre class="prettyprint lang-config">
SSLVerifyClient none
<Directory /usr/local/apache2/htdocs/secure/area>
-
SSLVerifyClient require
-SSLVerifyDepth 5
-SSLCACertificateFile conf/ssl.crt/ca.crt
-SSLCACertificatePath conf/ssl.crt
-SSLOptions +FakeBasicAuth
-SSLRequireSSL
-AuthName "Snake Oil Authentication"
-AuthType Basic
-AuthBasicProvider file
-AuthUserFile /usr/local/apache2/conf/httpd.passwd
-Require valid-user
-</Directory></pre></div>
+ SSLVerifyDepth 5
+ SSLCACertificateFile conf/ssl.crt/ca.crt
+ SSLCACertificatePath conf/ssl.crt
+ SSLOptions +FakeBasicAuth
+ SSLRequireSSL
+ AuthName "Snake Oil Authentication"
+ AuthType Basic
+ AuthBasicProvider file
+ AuthUserFile /usr/local/apache2/conf/httpd.passwd
+ Require valid-user
+</Directory>
+ </pre>
+
+
<p>Le mot de passe utilisé dans cet exemple correspond à la chaîne de
caractères "password" chiffrée en DES. Voir la documentation de la
utilisant la directive <code class="directive"><a href="../mod/mod_ssl.html#sslrequire">SSLRequire</a></code>, comme suit :</p>
- <div class="example"><h3>httpd.conf</h3><pre>
+ <pre class="prettyprint lang-config">
SSLVerifyClient none
<Directory /usr/local/apache2/htdocs/secure/area>
-
SSLVerifyClient require
SSLVerifyDepth 5
SSLCACertificateFile conf/ssl.crt/ca.crt
SSLRequireSSL
SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
-</Directory></pre></div>
+</Directory>
+ </pre>
+
<h3><a name="intranet" id="intranet">Comment imposer HTTPS avec chiffrements forts,
doivent se trouver en dehors de votre hôte virtuel HTTPS, afin qu'elles
s'appliquent à la fois à HTTP et HTTPS.</p>
- <div class="example"><h3>httpd.conf</h3><pre>
+ <pre class="prettyprint lang-config">
SSLCACertificateFile conf/ssl.crt/company-ca.crt
<Directory /usr/local/apache2/htdocs>
-# En dehors de subarea, seul l'accès depuis l'intranet est autorisé
-Order deny,allow
-Deny from all
-Allow from 192.168.1.0/24
+# En dehors de subarea, seul l'accès depuis l'intranet est
+# autorisé
+ Order deny,allow
+ Deny from all
+ Allow from 192.168.1.0/24
</Directory>
<Directory /usr/local/apache2/htdocs/subarea>
# Dans subarea, tout accès depuis l'intranet est autorisé
-# mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort
- + Mot de passe
+# mais depuis l'Internet, seul l'accès par HTTPS + chiffrement fort + Mot de passe
# ou HTTPS + chiffrement fort + certificat client n'est autorisé.
# Si HTTPS est utilisé, on s'assure que le niveau de chiffrement est fort.
# Autorise en plus les certificats clients comme une alternative à
# l'authentification basique.
-SSLVerifyClient optional
-SSLVerifyDepth 1
-SSLOptions +FakeBasicAuth +StrictRequire
-SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
-
-# ON oblige les clients venant d'Internet à utiliser HTTPS
-RewriteEngine on
-RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
-RewriteCond %{HTTPS} !=on
-RewriteRule . - [F]
-
-# On permet l'accès soit sur les critères réseaux, soit par authentification Basique
-Satisfy any
-
-# Contrôle d'accès réseau
-Order deny,allow
-Deny from all
-Allow 192.168.1.0/24
-
-# Configuration de l'authentification HTTP Basique
-AuthType basic
-AuthName "Protected Intranet Area"
-AuthBasicProvider file
-AuthUserFile conf/protected.passwd
-Require valid-user
-</Directory></pre></div>
+ SSLVerifyClient optional
+ SSLVerifyDepth 1
+ SSLOptions +FakeBasicAuth +StrictRequire
+ SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
+
+ # ON oblige les clients venant d'Internet à utiliser HTTPS
+ RewriteEngine on
+ RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
+ RewriteCond %{HTTPS} !=on
+ RewriteRule . - [F]
+
+ # On permet l'accès soit sur les critères réseaux, soit par authentification Basique
+ Satisfy any
+
+ # Contrôle d'accès réseau
+ Order deny,allow
+ Deny from all
+ Allow 192.168.1.0/24
+
+ # Configuration de l'authentification HTTP Basique
+ AuthType basic
+ AuthName "Protected Intranet Area"
+ AuthBasicProvider file
+ AuthUserFile conf/protected.passwd
+ Require valid-user
+</Directory>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
que plusieurs processus <code class="program"><a href="./programs/httpd.html">httpd</a></code> s'exécutent sur votre
système, mais il vous suffit d'envoyer les signaux au processus parent,
dont le PID est enregistré dans le fichier précisé par la directive
- <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>. C'est à dire que vous
- n'aurez jamais besoin d'envoyer des signaux à aucun de ces processus,
- sauf au processus parent. Trois types de signaux peuvent être envoyés
- au processus parent :
+ <code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>. Autrement dit, vous
+ n'aurez jamais besoin d'envoyer des signaux à aucun des
+ processus enfants, mais seulement au processus parent. Trois types
+ de signaux peuvent être envoyés au processus parent :
<code><a href="#term">TERM</a></code>,
<code><a href="#graceful">USR1</a></code>,
<code><a href="#hup">HUP</a></code>, et
<dd><code>apachectl -k stop</code></dd>
</dl>
- <p>L'envoi du signal <code>TERM</code> ou <code>stop</code> au
- processus parent induit chez celui-ci une tentative immédiate
+ <p>A la réception du signal <code>TERM</code> ou <code>stop</code>,
+ le processus parent tente immédiatement
de tuer tous ses processus enfants. Cela peut durer plusieurs secondes.
Après cela, le processus parent lui-même se termine. Toutes les requêtes
en cours sont terminées, et plus aucune autre n'est traitée.</p>
<dd><code>apachectl -k graceful</code></dd>
</dl>
- <p>L'envoi du signal <code>USR1</code> ou <code>graceful</code> au
- processus parent lui fait envoyer aux processus enfants
+ <p>A la réception du signal <code>USR1</code> ou
+ <code>graceful</code>, le
+ processus parent envoie aux processus enfants
<em>l'ordre</em> de se terminer une fois leur requête courante
traitée (ou de se terminer immédiatement s'ils n'ont plus rien à traiter).
Le processus parent relit ses fichiers de configuration et
serveur ne peut pas traiter de nouvelles requêtes (elle sont mises en
file d'attente par le système d'exploitation, et ne sont ainsi jamais
perdues) et pour respecter vos paramètres de personnalisation.
- Afin d'accomplir ceci, il doit conserver le
+ Pour y parvenir, il doit conserver le
<em>tableau</em> utilisé pour garder la trace de tous les processus
enfants au cours des différentes générations.</p>
<dd><code>apachectl -k restart</code></dd>
</dl>
- <p>L'envoi du signal <code>HUP</code> ou <code>restart</code> au
- processus parent lui fait tuer ses processus enfants comme pour le signal
+ <p>A la réception du signal <code>HUP</code> ou
+ <code>restart</code>, le
+ processus parent tue ses processus enfants comme pour le signal
<code>TERM</code>, mais le processus parent ne se termine pas.
Il relit ses fichiers de configuration, et réouvre ses fichiers de log.
Puis il donne naissance à un nouveau jeu de processus enfants
<dd><code>apachectl -k graceful-stop</code></dd>
</dl>
- <p>L'envoi du signal <code>WINCH</code> ou <code>graceful-stop</code>
- au processus parent lui fait <em>aviser</em> les processus enfants
+ <p>A la réception du signal <code>WINCH</code> ou
+ <code>graceful-stop</code>, le
+ processus parent <em>avise</em> ses processus enfants
de s'arrêter après le traitement de leur requête en cours
(ou de s'arrêter immédiatement s'ils n'ont plus de requête à traiter).
Le processus parent va alors supprimer son fichier
<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/suexec.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>La fonctionnalité <strong>suEXEC</strong> permet
l'exécution des programmes <strong>CGI</strong> et
<p>Si, par exemple, votre serveur web est configuré pour
s'exécuter en tant que :</p>
-<div class="example"><p><code>
- User www<br />
- Group webgroup<br />
-</code></p></div>
+<pre class="prettyprint lang-config">
+User www
+Group webgroup
+ </pre>
+
<p>et <code class="program"><a href="./programs/suexec.html">suexec</a></code> se trouve à
"/usr/local/apache2/bin/suexec", vous devez exécuter les
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<p><span>Langues Disponibles: </span><a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="./fr/upgrading.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Afin d'assister les utilisateurs lors de leurs opérations de mise à
jour, nous maintenons un document
<li>configure: le jeu de modules "reallyall" ajoute les modules de
développeur au jeu "all".</li>
-
- <li>apr et apr-util: APR et APR-Util ne sont plus fournis dans le
- paquet Apache httpd 2.4. Vous pouvez soit continuer à utiliser les
- versions installées, soit continuer à utiliser l'option du script
- configure <code>--with-included-apr</code> après avoir téléchargés
- les paquets apr/apr-util (depuis <a href="http://apr.apache.org/">Apache
- APR</a>), et les avoir décompressés dans <code>./srclib/</code>.</li>
</ul>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
la nouvelle méthode :</p>
<p>Dans cet exemple, toutes les requêtes sont rejetées :</p>
- <div class="example"><h3>version 2.2 :</h3><p><code>
-
- Order deny,allow<br />
- Deny from all
- </code></p></div>
- <div class="example"><h3>version 2.4 :</h3><p><code>
-
+ <div class="example"><h3>version 2.2 :</h3><pre class="prettyprint lang-config">
+Order deny,allow
+Deny from all
+ </pre>
+</div>
+ <div class="example"><h3>version 2.4 :</h3><pre class="prettyprint lang-config">
Require all denied
- </code></p></div>
+ </pre>
+</div>
<p>Dans cet exemple, toutes les requêtes sont acceptées :</p>
- <div class="example"><h3>version 2.2 :</h3><p><code>
-
- Order allow,deny<br />
- Allow from all
- </code></p></div>
- <div class="example"><h3>version 2.4 :</h3><p><code>
-
+ <div class="example"><h3>version 2.2 :</h3><pre class="prettyprint lang-config">
+Order allow,deny
+Allow from all
+ </pre>
+</div>
+ <div class="example"><h3>version 2.4 :</h3><pre class="prettyprint lang-config">
Require all granted
- </code></p></div>
+ </pre>
+</div>
<p>Dans l'exemple suivant, tous les hôtes du domaine example.org
ont l'autorisation d'accès, tous les autres sont rejetés :</p>
- <div class="example"><h3>version 2.2 :</h3><p><code>
-
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from example.org
- </code></p></div>
- <div class="example"><h3>version 2.4 :</h3><p><code>
-
+ <div class="example"><h3>version 2.2 :</h3><pre class="prettyprint lang-config">
+Order Deny,Allow
+Deny from all
+Allow from example.org
+ </pre>
+</div>
+ <div class="example"><h3>version 2.4 :</h3><pre class="prettyprint lang-config">
Require host example.org
- </code></p></div>
+ </pre>
+</div>
<code class="directive"><a href="./mod/mod_include.html#ssilegacyexprparser">SSILegacyExprParser</a></code> a
été activée pour le répertoire contenant les pages d'erreur.
</li>
+
+ <li>La fonctionnalité fournie par <code>mod_authn_alias</code>
+ dans les précédentes versions (en fait la directive
+ <code class="directive"><a href="./mod/mod_authn_core.html#authnprovideralias">AuthnProviderAlias</a></code>)
+ est maintenant fournie par <code class="module"><a href="./mod/mod_authn_core.html">mod_authn_core</a></code>.
+ </li>
</ul>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
</variants>
</metafile>
<a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/urlmapping.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document explique comment le serveur HTTP Apache utilise l'URL contenue dans une
requête pour déterminer le noeud du système de fichier à partir duquel le
<p>Une autre méthode consiste à utiliser la directive <code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code> pour rattacher toute portion
du système de fichiers à l'arborescence du site web. Par exemple, avec</p>
-<div class="example"><p><code>Alias /docs /var/web</code></p></div>
+<pre class="prettyprint lang-config">Alias /docs /var/web</pre>
+
<p>l'URL <code>http://www.example.com/docs/dir/file.html</code>
correspondra au fichier <code>/var/web/dir/file.html</code>. La
sur les <a class="glossarylink" href="./glossary.html#regex" title="voir glossaire">expressions rationnelles</a>.
Par exemple,</p>
-<div class="example"><p><code>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
- /home/$1/cgi-bin/$2</code></p></div>
+<pre class="prettyprint lang-config">
+ ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+) /home/$1/cgi-bin/$2
+ </pre>
+
<p>fera correspondre une requête du style
<code>http://example.com/~user/cgi-bin/script.cgi</code> au chemin
<code>/home/user/public_html/file.html</code>, utilisez la directive
<code>AliasMatch</code> suivante :</p>
-<div class="example"><p><code>AliasMatch ^/upages/([a-zA-Z0-9]+)(/(.*))?$
- /home/$1/public_html/$3</code></p></div>
+<pre class="prettyprint lang-config">
+ AliasMatch ^/upages/([a-zA-Z0-9]+)(/(.*))?$ /home/$1/public_html/$3
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="redirect" id="redirect">Redirection d'URL</a></h2>
nouveau répertoire <code>/bar/</code>, vous pouvez demander aux clients
de le requérir à sa nouvelle localisation comme suit :</p>
-<div class="example"><p><code>Redirect permanent /foo/ http://www.example.com/bar/</code></p></div>
+<pre class="prettyprint lang-config">
+ Redirect permanent /foo/ http://www.example.com/bar/
+ </pre>
+
<p>Ceci aura pour effet de rediriger tout chemin d'URL commençant par
<code>/foo/</code> vers le même chemin d'URL sur le serveur
laisser toutes les autres requêtes inchangées, utilisez la
configuration suivante :</p>
-<div class="example"><p><code>RedirectMatch permanent ^/$
- http://www.example.com/startpage.html</code></p></div>
+<pre class="prettyprint lang-config">
+ RedirectMatch permanent ^/$ http://www.example.com/startpage.html
+ </pre>
+
<p>De même, pour rediriger temporairement toutes les pages d'un site
vers une page particulière d'un autre site, utilisez ce qui suit :</p>
-<div class="example"><p><code>RedirectMatch temp .*
- http://othersite.example.com/startpage.html</code></p></div>
+<pre class="prettyprint lang-config">
+ RedirectMatch temp .* http://othersite.example.com/startpage.html
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="proxy" id="proxy">Mandataire inverse (Reverse Proxy)</a></h2>
<code>/bar/</code> sur <code>internal.example.com</code>
et les renvoie au client comme s'ils appartenaient au serveur local.</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
ProxyPass /foo/ http://internal.example.com/bar/<br />
ProxyPassReverse /foo/ http://internal.example.com/bar/<br />
ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
ProxyPassReverseCookiePath /foo/ /bar/
-</code></p></div>
+</pre>
+
<p>La directive <code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code> configure
le serveur pour rapatrier les documents appropriés, alors que la directive
d'utres contenus) situés dans la page au moment où elle est envoyée au
client en utilisant le module <code class="module"><a href="./mod/mod_substitute.html">mod_substitute</a></code>.</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
Substitute s/internal\.example\.com/www.example.com/i
-</code></p></div>
+</pre>
+
<p>Le module <code class="module"><a href="./mod/mod_proxy_html.html">mod_proxy_html</a></code> rend possible une réécriture plus
élaborée des liens en HTML et XHTML. Il permet de créer des listes
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="../ko/vhosts/examples.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="../tr/vhosts/examples.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Le but de ce document est d'essayer de répondre aux questions
que sur la machine possédant ces entrées.</p>
</div>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+# Apache doit écouter sur le port 80
+Listen 80
+<VirtualHost *:80>
+ DocumentRoot /www/example1
+ ServerName www.example.com
+
+ # Autres directives ici
+</VirtualHost>
+
+<VirtualHost *:80>
+ DocumentRoot /www/example2
+ ServerName www.example.org
+
+ # Autres directives ici
+</VirtualHost>
+ </pre>
- # Apache doit écouter sur le port 80<br />
- Listen 80<br />
- <br />
- <br />
- <VirtualHost *:80><br />
- <span class="indent">
- DocumentRoot /www/example.com<br />
- ServerName www.example1.com<br />
- <br />
- # Autres directives ici<br />
- <br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost *:80><br />
- <span class="indent">
- DocumentRoot /www/example.org<br />
- ServerName www.example2.org<br />
- <br />
- # Autres directives ici<br />
- <br />
- </span>
- </VirtualHost>
- </code></p></div>
+
<p>Les astérisques correspondent à toutes les adresses, si bien que
le serveur principal ne répondra jamais à aucune requête. Comme le
(<code>172.20.30.50</code>), deux serveurs virtuels (ou plus)
répondront.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
+ <pre class="prettyprint lang-config">
+Listen 80
+
+# Serveur "principal" sur 172.20.30.40
+ServerName server.example.com
+DocumentRoot /www/mainserver
+
+<VirtualHost 172.20.30.50>
+ DocumentRoot /www/example1
+ ServerName www.example.com
+ # D'autres directives ici ...
+</VirtualHost>
+
+<VirtualHost 172.20.30.50>
+ DocumentRoot /www/example2
+ ServerName www.example.org
+
+ # D'autres directives ici ...
+</VirtualHost>
+ </pre>
- Listen 80<br />
- <br />
- # Serveur "principal" sur 172.20.30.40<br />
- ServerName server.example.com<br />
- DocumentRoot /www/mainserver<br />
- <br />
- <VirtualHost 172.20.30.50><br />
- <span class="indent">
- DocumentRoot /www/example.com<br />
- ServerName www.example.com<br />
- <br />
- # D'autres directives ici ...<br />
- <br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.50><br />
- <span class="indent">
- DocumentRoot /www/example.org<br />
- ServerName www.example.org<br />
- <br />
- # D'autres directives ici ...<br />
- <br />
- </span>
- </VirtualHost>
- </code></p></div>
<p>Toute requête arrivant sur une autre adresse que
<code>172.20.30.50</code> sera servie par le serveur principal.
aux requêtes internes et externes, au moyen d'une seule section
<code>VirtualHost</code>.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+<VirtualHost 192.168.1.1 172.20.30.40>
+ DocumentRoot /www/server1
+ ServerName server.example.com
+ ServerAlias server
+</VirtualHost>
+ </pre>
- <br />
- <VirtualHost 192.168.1.1 172.20.30.40><br />
- <span class="indent">
- DocumentRoot /www/server1<br />
- ServerName server.example.com<br />
- ServerAlias server<br />
- </span>
- </VirtualHost>
- </code></p></div>
<p>Ainsi, les requêtes en provenance de chacun des deux réseaux
seront servies par le même <code>VirtualHost</code>.</p>
la sélection de la meilleure correspondance du point de vue adresse
IP/port.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+Listen 80
+Listen 8080
+
+<VirtualHost 172.20.30.40:80>
+ ServerName www.example.com
+ DocumentRoot /www/domain-80
+</VirtualHost>
+
+<VirtualHost 172.20.30.40:8080>
+ ServerName www.example.com
+ DocumentRoot /www/domain-8080
+</VirtualHost>
+
+<VirtualHost 172.20.30.40:80>
+ ServerName www.example.org
+ DocumentRoot /www/otherdomain-80
+</VirtualHost>
+
+<VirtualHost 172.20.30.40:8080>
+ ServerName www.example.org
+ DocumentRoot /www/otherdomain-8080
+</VirtualHost>
+ </pre>
- Listen 80<br />
- Listen 8080<br />
- <br />
- <VirtualHost 172.20.30.40:80><br />
- <span class="indent">
- ServerName www.example.com<br />
- DocumentRoot /www/domain-80<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40:8080><br />
- <span class="indent">
- ServerName www.example.com<br />
- DocumentRoot /www/domain-8080<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40:80><br />
- <span class="indent">
- ServerName www.example.org<br />
- DocumentRoot /www/otherdomain-80<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40:8080><br />
- <span class="indent">
- ServerName www.example.org<br />
- DocumentRoot /www/otherdomain-8080<br />
- </span>
- </VirtualHost>
- </code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
et <code>172.20.30.50</code>) correspondant respectivement aux noms
<code>www.example.com</code> et <code>www.example.org</code>.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+Listen 80
+
+<VirtualHost 172.20.30.40>
+ DocumentRoot /www/example1
+ ServerName www.example.com
+</VirtualHost>
+
+<VirtualHost 172.20.30.50>
+ DocumentRoot /www/example2
+ ServerName www.example.org
+</VirtualHost>
+ </pre>
- Listen 80<br />
- <br />
- <VirtualHost 172.20.30.40><br />
- <span class="indent">
- DocumentRoot /www/example.com<br />
- ServerName www.example1.com<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.50><br />
- <span class="indent">
- DocumentRoot /www/example.org<br />
- ServerName www.example2.org<br />
- </span>
- </VirtualHost>
- </code></p></div>
<p>Les requêtes provenant d'adresses non spécifiées dans l'une des
directives <code><VirtualHost></code> (comme pour
Pour chacun d'eux, nous voulons un hébergement sur les ports 80
et 8080.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+Listen 172.20.30.40:80
+Listen 172.20.30.40:8080
+Listen 172.20.30.50:80
+Listen 172.20.30.50:8080
+
+<VirtualHost 172.20.30.40:80>
+ DocumentRoot /www/example1-80
+ ServerName www.example.com
+</VirtualHost>
+
+<VirtualHost 172.20.30.40:8080>
+ DocumentRoot /www/example1-8080
+ ServerName www.example.com
+</VirtualHost>
+
+<VirtualHost 172.20.30.50:80>
+ DocumentRoot /www/example2-80
+ ServerName www.example.org
+</VirtualHost>
+
+<VirtualHost 172.20.30.50:8080>
+ DocumentRoot /www/example2-8080
+ ServerName www.example.org
+</VirtualHost>
+ </pre>
- Listen 172.20.30.40:80<br />
- Listen 172.20.30.40:8080<br />
- Listen 172.20.30.50:80<br />
- Listen 172.20.30.50:8080<br />
- <br />
- <VirtualHost 172.20.30.40:80><br />
- <span class="indent">
- DocumentRoot /www/example.com-80<br />
- ServerName www.example.com<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40:8080><br />
- <span class="indent">
- DocumentRoot /www/example.com-8080<br />
- ServerName www.example.com<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.50:80><br />
- <span class="indent">
- DocumentRoot /www/example.org-80<br />
- ServerName www.example.org<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.50:8080><br />
- <span class="indent">
- DocumentRoot /www/example.org-8080<br />
- ServerName www.example.org<br />
- </span>
- </VirtualHost>
- </code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
section un serveur virtuel sélectionnable uniquement en fonction de
son adresse IP.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+Listen 80
+<VirtualHost 172.20.30.40>
+ DocumentRoot /www/example1
+ ServerName www.example.com
+</VirtualHost>
+
+<VirtualHost 172.20.30.40>
+ DocumentRoot /www/example2
+ ServerName www.example.org
+</VirtualHost>
+
+<VirtualHost 172.20.30.40>
+ DocumentRoot /www/example3
+ ServerName www.example.net
+</VirtualHost>
+
+# IP-based
+<VirtualHost 172.20.30.50>
+ DocumentRoot /www/example4
+ ServerName www.example.edu
+</VirtualHost>
+
+<VirtualHost 172.20.30.60>
+ DocumentRoot /www/example5
+ ServerName www.example.gov
+</VirtualHost>
+ </pre>
- Listen 80<br />
- <VirtualHost 172.20.30.40><br />
- <span class="indent">
- DocumentRoot /www/example1<br />
- ServerName www.example.com<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40><br />
- <span class="indent">
- DocumentRoot /www/example2<br />
- ServerName www.example.org<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40><br />
- <span class="indent">
- DocumentRoot /www/example3<br />
- ServerName www.example.net<br />
- </span>
- </VirtualHost><br />
- <br />
- # "par-IP"<br />
- <VirtualHost 172.20.30.50><br />
- <span class="indent">
- DocumentRoot /www/example4<br />
- ServerName www.example.edu<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.60><br />
- <span class="indent">
- DocumentRoot /www/example5<br />
- ServerName www.example.gov<br />
- </span>
- </VirtualHost>
- </code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
transfert, au cas où plusieurs noms de domaines cohabitent sur
une même machine.</p>
- <div class="example"><p><code>
- <VirtualHost *:*><br />
- ProxyPreserveHost On<br />
- ProxyPass / http://192.168.111.2<br />
- ProxyPassReverse / http://192.168.111.2/<br />
- ServerName hostname.example.com<br />
- </VirtualHost>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<VirtualHost *:*>
+ ProxyPreserveHost On
+ ProxyPass / http://192.168.111.2/
+ ProxyPassReverse / http://192.168.111.2/
+ ServerName hostname.example.com
+</VirtualHost>
+ </pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
d'adresses IP ou de ports non connus, <em>c'est-à-dire</em>, d'un
couple adresse/port non traité par aucun autre serveur virtuel.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+<VirtualHost _default_:*>
+ DocumentRoot /www/default
+</VirtualHost>
+ </pre>
- <VirtualHost _default_:*><br />
- <span class="indent">
- DocumentRoot /www/default<br />
- </span>
- </VirtualHost>
- </code></p></div>
<p>L'utilisation d'un tel serveur virtuel avec un joker pour le
port empêche de manière efficace qu'une requête n'atteigne le
le serveur écoute sur plusieurs ports et un second serveur virtuel
<code>_default_</code> pour le port 80 est ajouté.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+<VirtualHost _default_:80>
+ DocumentRoot /www/default80
+ # ...
+</VirtualHost>
+
+<VirtualHost _default_:*>
+ DocumentRoot /www/default
+ # ...
+</VirtualHost>
+ </pre>
- <VirtualHost _default_:80><br />
- <span class="indent">
- DocumentRoot /www/default80<br />
- # ...<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost _default_:*><br />
- <span class="indent">
- DocumentRoot /www/default<br />
- # ...<br />
- </span>
- </VirtualHost>
- </code></p></div>
<p>Le serveur virtuel par défaut défini pour le port 80 (il doit
impérativement être placé avant un autre serveur virtuel par
<p>Nous voulons créer un serveur virtuel par défaut seulement
pour le port 80.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+<VirtualHost _default_:80>
+DocumentRoot /www/default
+...
+</VirtualHost>
+ </pre>
- <VirtualHost _default_:80><br />
- DocumentRoot /www/default<br />
- ...<br />
- </VirtualHost>
- </code></p></div>
<p>Une requête vers une adresse non spécifiée sur le port 80
sera servie par le serveur virtuel par défaut, et toute autre
adresse IP (<code>172.20.30.50</code>) dans la directive
<code>VirtualHost</code>.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+Listen 80
+ServerName www.example.com
+DocumentRoot /www/example1
+
+<VirtualHost 172.20.30.40 172.20.30.50>
+ DocumentRoot /www/example2
+ ServerName www.example.org
+ # ...
+</VirtualHost>
+
+<VirtualHost 172.20.30.40>
+ DocumentRoot /www/example3
+ ServerName www.example.net
+ ServerAlias *.example.net
+ # ...
+</VirtualHost>
+ </pre>
- Listen 80<br />
- ServerName www.example.com<br />
- DocumentRoot /www/example.com<br />
- <br />
- <VirtualHost 172.20.30.40 172.20.30.50><br />
- <span class="indent">
- DocumentRoot /www/example.org<br />
- ServerName www.example.org<br />
- # ...<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40><br />
- <span class="indent">
- DocumentRoot /www/example.net<br />
- ServerName www.example.net<br />
- ServerAlias *.example.net<br />
- # ...<br />
- </span>
- </VirtualHost>
- </code></p></div>
<p>Le serveur virtuel peut maintenant être joint par la nouvelle
adresse (comme un serveur virtuel par IP) et par l'ancienne
des liens dont les URLs auront un préfixe identifiant les serveurs
virtuels par nom.</p>
- <div class="example"><h3>Configuration du serveur</h3><p><code>
-
+ <pre class="prettyprint lang-config">
+<VirtualHost 172.20.30.40>
+ # serveur virtuel primaire
+ DocumentRoot /www/subdomain
+ RewriteEngine On
+ RewriteRule . /www/subdomain/index.html
+ # ...
+</VirtualHost>
+
+<VirtualHost 172.20.30.40>
+DocumentRoot /www/subdomain/sub1
+ ServerName www.sub1.domain.tld
+ ServerPath /sub1/
+ RewriteEngine On
+ RewriteRule ^(/sub1/.*) /www/subdomain$1
+ # ...
+</VirtualHost>
+
+<VirtualHost 172.20.30.40>
+ DocumentRoot /www/subdomain/sub2
+ ServerName www.sub2.domain.tld
+ ServerPath /sub2/
+ RewriteEngine On
+ RewriteRule ^(/sub2/.*) /www/subdomain$1
+ # ...
+</VirtualHost>
+ </pre>
- <VirtualHost 172.20.30.40><br />
- <span class="indent">
- # Serveur virtuel primaire<br />
- DocumentRoot /www/subdomain<br />
- RewriteEngine On<br />
- RewriteRule . /www/subdomain/index.html<br />
- # ...<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40><br />
- DocumentRoot /www/subdomain/sub1<br />
- <span class="indent">
- ServerName www.sub1.domain.tld<br />
- ServerPath /sub1/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub1/.*) /www/subdomain$1<br />
- # ...<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.40><br />
- <span class="indent">
- DocumentRoot /www/subdomain/sub2<br />
- ServerName www.sub2.domain.tld<br />
- ServerPath /sub2/<br />
- RewriteEngine On<br />
- RewriteRule ^(/sub2/.*) /www/subdomain$1<br />
- # ...<br />
- </span>
- </VirtualHost>
- </code></p></div>
<p>À cause de la directive
<code class="directive"><a href="../mod/core.html#serverpath">ServerPath</a></code>, une requête sur
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="../ko/vhosts/fd-limits.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="../tr/vhosts/fd-limits.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Quand de nombreux serveurs virtuels sont créés, Apache peut
variable <code>%v</code>. Ajoutez cette variable au début de la chaîne
de définition du format de journalisations :</p>
-<div class="example"><p><code>
-LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost<br />
+<pre class="prettyprint lang-config">
+LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost
-</code></p></div>
+</pre>
+
<p>Cette configuration va provoquer la création d'un fichier de
journalisation au format standard (CLF : 'Common Log Format'), mais dont
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="../ko/vhosts/ip-based.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="../tr/vhosts/ip-based.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#requirements">Système requis</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#howto">Comment configurer Apache</a></li>
de configuration pour définir l'adresse IP (ou serveur virtuel)
que le processus résident doit gérer. Par exemple :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
Listen 192.0.2.100:80
- </code></p></div>
+ </pre>
+
<p>Il est recommandé d'utiliser une adresse IP plutôt qu'un nom
de domaine (consultez <a href="../dns-caveats.html">Problèmes DNS
<code class="directive"><a href="../mod/mod_log_config.html#customlog">CustomLog</a></code> avec des
valeurs différentes pour chaque serveur virtuel. Par exemple :</p>
- <div class="example"><p><code>
- <VirtualHost 172.20.30.40:80><br />
- ServerAdmin webmaster@www1.example.com<br />
- DocumentRoot /www/vhosts/www1<br />
- ServerName www1.example.com<br />
- ErrorLog /www/logs/www1/error_log<br />
- CustomLog /www/logs/www1/access_log combined<br />
- </VirtualHost><br />
- <br />
- <VirtualHost 172.20.30.50:80><br />
- ServerAdmin webmaster@www2.example.org<br />
- DocumentRoot /www/vhosts/www2<br />
- ServerName www2.example.org<br />
- ErrorLog /www/logs/www2/error_log<br />
- CustomLog /www/logs/www2/access_log combined<br />
- </VirtualHost>
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<VirtualHost 172.20.30.40:80>
+ ServerAdmin webmaster@www1.example.com
+ DocumentRoot /www/vhosts/www1
+ ServerName www1.example.com
+ ErrorLog /www/logs/www1/error_log
+ CustomLog /www/logs/www1/access_log combined
+</VirtualHost>
+
+<VirtualHost 172.20.30.50:80>
+ ServerAdmin webmaster@www2.example.org
+ DocumentRoot /www/vhosts/www2
+ ServerName www2.example.org
+ ErrorLog /www/logs/www2/error_log
+ CustomLog /www/logs/www2/access_log combined
+</VirtualHost>
+ </pre>
+
<p>Il est recommandé d'utiliser une adresse IP plutôt qu'un nom
de domaine comme argument à la directive <VirtualHost>
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
<a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document propose une méthode performante pour servir un nombre
<code><VirtualHost></code> très semblables,
dans le style :</p>
-<div class="example"><pre>
+<pre class="prettyprint lang-config">
<VirtualHost 111.22.33.44>
ServerName customer-1.example.com
DocumentRoot /www/hosts/customer-1.example.com/docs
DocumentRoot /www/hosts/customer-N.example.com/docs
ScriptAlias /cgi-bin/ /www/hosts/customer-N.example.com/cgi-bin
</VirtualHost>
-</pre></div>
+</pre>
+
<p>Nous voulons remplacer toutes les configurations
<code><VirtualHost></code> par un mécanisme qui les génère
l'hébergement virtuel décrit dans la section <a href="#motivation">À qui ce document est-il destiné ?</a> ci-dessus
en utilisant <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>.</p>
-<div class="example"><p><code>
-# extrait le nom du serveur de l'en-tête Host:<br />
-UseCanonicalName Off<br />
-<br />
+<pre class="prettyprint lang-config">
+# extrait le nom du serveur de l'en-tête Host:
+UseCanonicalName Off
+
# ce format de journal peut être éclaté en journaux par serveur virtuel
-# à l'aide du premier champ via l'utilitaire split-logfile<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
+# à l'aide du premier champ via l'utilitaire split-logfile
+LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
+CustomLog logs/access_log vcommon
+
# inclut le nom du serveur dans les noms de fichiers ressources
-# nécessaires aux traitements des requêtes<br />
-VirtualDocumentRoot /www/hosts/%0/docs<br />
+# nécessaires aux traitements des requêtes
+VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin
-</code></p></div>
+</pre>
+
<p>Pour changer cette configuration en solution de serveur virtuel
par IP, il suffit de remplacer <code>UseCanonicalName
<code>cgi-bin</code> suffit pour l'ensemble des
serveurs virtuels.</p>
-<div class="example"><p><code>
-UseCanonicalName Off<br />
-<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# insertion d'une partie du nom du serveur dans les noms de fichiers<br />
-VirtualDocumentRoot /home/%2/www<br />
-<br />
-# répertoire cgi-bin unique<br />
-ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</code></p></div>
+<pre class="prettyprint lang-config">
+UseCanonicalName Off
+
+LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
+CustomLog logs/access_log vcommon
+
+# insertion d'une partie du nom du serveur dans les noms de fichiers
+VirtualDocumentRoot /home/%2/www
+
+# répertoire cgi-bin unique
+ScriptAlias /cgi-bin/ /www/std-cgi/
+</pre>
+
<p>Vous trouverez des exemples plus élaborés d'utilisation de la
directive <code>VirtualDocumentRoot</code> dans la documentation du
<code><VirtualHost></code> conventionnelles, comme indiqué
plus loin.</p>
-<div class="example"><p><code>
-UseCanonicalName Off<br />
-<br />
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
-<br />
-<Directory /www/commercial><br />
-<span class="indent">
- Options FollowSymLinks<br />
- AllowOverride All<br />
-</span>
-</Directory><br />
-<br />
-<Directory /www/homepages><br />
-<span class="indent">
- Options FollowSymLinks<br />
- AllowOverride None<br />
-</span>
-</Directory><br />
-<br />
-<VirtualHost 111.22.33.44><br />
-<span class="indent">
- ServerName www.commercial.example.com<br />
- <br />
- CustomLog logs/access_log.commercial vcommon<br />
- <br />
- VirtualDocumentRoot /www/commercial/%0/docs<br />
- VirtualScriptAlias /www/commercial/%0/cgi-bin<br />
-</span>
-</VirtualHost><br />
-<br />
-<VirtualHost 111.22.33.45><br />
-<span class="indent">
- ServerName www.homepages.example.com<br />
- <br />
- CustomLog logs/access_log.homepages vcommon<br />
- <br />
- VirtualDocumentRoot /www/homepages/%0/docs<br />
- ScriptAlias /cgi-bin/ /www/std-cgi/<br />
-</span>
+<pre class="prettyprint lang-config">
+UseCanonicalName Off
+
+LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
+
+<Directory /www/commercial>
+ Options FollowSymLinks
+ AllowOverride All
+</Directory>
+
+<Directory /www/homepages>
+ Options FollowSymLinks
+ AllowOverride None
+</Directory>
+
+<VirtualHost 111.22.33.44>
+ ServerName www.commercial.example.com
+
+ CustomLog logs/access_log.commercial vcommon
+
+ VirtualDocumentRoot /www/commercial/%0/docs
+ VirtualScriptAlias /www/commercial/%0/cgi-bin
+</VirtualHost>
+
+<VirtualHost 111.22.33.45>
+ ServerName www.homepages.example.com
+
+ CustomLog logs/access_log.homepages vcommon
+
+ VirtualDocumentRoot /www/homepages/%0/docs
+ ScriptAlias /cgi-bin/ /www/std-cgi/
</VirtualHost>
-</code></p></div>
+</pre>
+
<div class="note">
<h3>Note</h3>
la-même la nécessité d'une recherche DNS. La journalisation doit
aussi être adaptée pour fonctionner sur un tel système.</p>
-<div class="example"><p><code>
+<pre class="prettyprint lang-config">
# obtention du nom du serveur par recherche DNS inverse
-# sur l'adresse IP<br />
-UseCanonicalName DNS<br />
-<br />
+# sur l'adresse IP
+UseCanonicalName DNS
+
# insertion de l'adresse IP dans les journaux afin de pouvoir les
-# éclater<br />
-LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
-CustomLog logs/access_log vcommon<br />
-<br />
-# insertion de l'adresse IP dans les noms de fichiers<br />
-VirtualDocumentRootIP /www/hosts/%0/docs<br />
-VirtualScriptAliasIP /www/hosts/%0/cgi-bin<br />
-</code></p></div>
+# éclater
+LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
+CustomLog logs/access_log vcommon
+
+# insertion de l'adresse IP dans les noms de fichiers
+VirtualDocumentRootIP /www/hosts/%0/docs
+VirtualScriptAliasIP /www/hosts/%0/cgi-bin
+</pre>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="rewrite" id="rewrite">Hébergement virtuel de masse avec
mod_rewrite</a></h2>
-
+
<p>
L'hébergement virtuel de masse peut aussi être effectué en utilisant
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, soit à l'aide de simples directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, soit en utilisant des
<variants>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>
</variants>
<a href="../ko/vhosts/name-based.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="../tr/vhosts/name-based.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document décrit quand et comment utiliser des serveurs
virtuels par nom.</p>
la même adresse IP. Il vous suffit d'ajouter la configuration
suivante à <code>httpd.conf</code> :</p>
- <div class="example"><p><code>
- <VirtualHost *:80><br />
- <span class="indent">
- # Le premier serveur virtuel de la liste est aussi le
- # serveur par défaut pour *:80
- ServerName www.example.com<br />
- ServerAlias example.com <br />
- DocumentRoot /www/domain<br />
- </span>
- </VirtualHost><br />
- <br />
- <VirtualHost *:80><br />
- <span class="indent">ServerName other.example.com<br />
- DocumentRoot /www/otherdomain<br />
- </span>
- </VirtualHost><br />
- </code></p></div>
+ <pre class="prettyprint lang-config">
+<VirtualHost *:80>
+ # Le premier serveur virtuel de la liste est aussi le
+ # serveur par défaut pour *:80
+ ServerName www.example.com
+ ServerAlias example.com
+ DocumentRoot /www/domain
+</VirtualHost>
+
+<VirtualHost *:80>
+ ServerName other.example.com
+ DocumentRoot /www/otherdomain
+</VirtualHost>
+ </pre>
+
<p>Autrement, vous pouvez spécifiez une adresse IP explicite
à la place de <code>*</code> dans la directive
indique aux utilisateurs les autres noms permis pour accéder au
même site Web :</p>
- <div class="example"><p><code>
+ <pre class="prettyprint lang-config">
ServerAlias example.com *.example.com
- </code></p></div>
+ </pre>
+
<p>ainsi, toutes les requêtes portant sur un domaine
<code>example.com</code> seront servies par le serveur virtuel
<variants>
<variant outdated="yes">de</variant>
<variant>en</variant>
- <variant outdated="yes">fr</variant>
+ <variant>fr</variant>
<variant outdated="yes">ja</variant>
<variant outdated="yes">ko</variant>
<variant outdated="yes">tr</variant>