URI: access.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+
+URI: access.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Utiliser mod_rewrite pour le contrôle d'accès - 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 href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.4</p>
+<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>Utiliser mod_rewrite pour le contrôle d'accès</h1>
+<div class="toplang">
+<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>
+
+
+<p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">documentation de référence</a> de
+<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Il explique comment utiliser
+<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour contrôler l'accès à diverses
+ressources, ainsi que d'autres techniques en rapport. Il contient de
+nombreux exemples d'utilisation courante de mod_rewrite avec une
+description détaillée de leur fonctionnement.</p>
+
+<div class="warning">Vous devez vous attacher à comprendre le
+fonctionnement des exemples, car la plupart d'entre eux ne
+fonctionneront pas sur votre système si vous vous contentez de les
+copier/coller dans vos fichiers de configuration.</div>
+
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#blocked-inline-images">Blocage du référencement à chaud (Hotlinking) d'images</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#blocking-of-robots">Blocage des robots</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#host-deny">Rejet des clients contenus dans une liste noire</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#referer-deflector">Aiguillage basé sur l'en-tête Referer</a></li>
+</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Documentation du module mod_rewrite</a></li><li><a href="intro.html">Introduction à mod_rewrite</a></li><li><a href="remapping.html">Redirection et remise en
+correspondance</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="proxy.html">Serveurs mandataires</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="advanced.html">Techniques avancées</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="blocked-inline-images" id="blocked-inline-images">Blocage du référencement à chaud (Hotlinking) d'images</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Cette technique vous permet d'interdire à d'autres sites
+ d'inclure directement vos images dans leurs pages. On fait
+ souvent référence à cette pratique sous le nom de
+ référencement à chaud (Hotlinking) qui entraîne l'utilisation
+ de votre bande passante pour servir des contenus faisant
+ partie du site de quelqu'un d'autre.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Cette technique repose sur la valeur de la variable
+ optionnelle <code>HTTP_REFERER</code>. Certaines personnes
+ pourront donc contourner cette limitation. Pour la plupart des
+ utilisateurs cependant, la requête échouera, en ce sens que
+ l'image ne sera pas affichée depuis le site tiers.</p>
+ <p>Il y a plusieurs manières de gérer cette situation.</p>
+
+ <p>Dans le premier exemple, nous rejetons tout simplement la
+ requête si elle ne provenait pas d'une page appartenant à notre
+ site. Pour les besoins de cet exemple, nous supposons que le nom
+ de votre site est <code>www.example.com</code>.</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> - [F,NC]
+</code></p></div>
+
+ <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>
+
+ <p>Dans le troisième exemple, nous redirigeons la requête vers
+ une image appartenant à un autre site.</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> 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
+ qu'ils s'attendent à voir.</p>
+
+ </dd>
+
+ <dt>Discussion :</dt>
+
+ <dd>
+ <p>Si vous ne voulez pas rediriger la requête, mais
+ 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>
+ </dd>
+ </dl>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="blocking-of-robots" id="blocking-of-robots">Blocage des robots</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>
+ Dans cet exemple, nous allons discuter d'une méthode permettant
+ de bloquer les requêtes persistentes en provenance d'un robot
+ particulier, ou d'un navigateur.</p>
+
+ <p>La méthode classique pour exclure un robot consiste à définir
+ un fichier, <code>/robots.txt</code> qui spécifie les parties de
+ votre site web pour lesquelles vous voulez exclure les robots.
+ Malheureusement, certains robots ne tiennent pas compte de ces
+ fichiers.
+ </p>
+
+ <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>
+ </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>
+
+ <p>Dans cet exemple, nous bloquons un robot nommé
+ <code>Vilain_Robot</code> pour le répertoire
+ <code>/secret/fichiers</code>. Si vous voulez bloquer ce client
+ 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>
+ </dd>
+
+ <dt>Discussion :</dt>
+
+ <dd>
+ <p>
+ 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>
+ <p>
+ Comme indiqué plus haut, il est aisé de contourner cette
+ technique, simplement en modifiant le contenu de l'en-tête
+ <code>USER_AGENT</code>. Si vous subissez une attaque en règle,
+ vous allez devoir réfléchir à un blocage à un niveau supérieur,
+ par exemple une règle de filtrage de votre pare-feu.
+ </p>
+
+ </dd>
+
+ </dl>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="host-deny" id="host-deny">Rejet des clients contenus dans une liste noire</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons interdire l'accès à notre serveur aux clients
+ contenus dans une liste noire similaire à
+ <code>hosts.deny</code>.</p>
+ </dd>
+
+ <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 />
+RewriteRule ^ - [F]
+</code></p></div>
+
+<div class="example"><p><code>
+##<br />
+## hosts.deny<br />
+##<br />
+## ATTENTION! Ceci est une table de correspondances, non une liste,<br />
+## même si elle est traitée comme telle. mod_rewrite<br />
+## l'interprète comme une liste de paires clé/valeur, et<br />
+## chaque entrée doit au moins posséder une valeur par<br />
+## défaut "-".<br />
+<br />
+193.102.180.41 -<br />
+bsdti1.sdm.de -<br />
+192.76.162.40 -<br />
+</code></p></div>
+ </dd>
+
+ <dt>Discussion :</dt>
+ <dd>
+ <p>
+ La seconde condition RewriteCond présuppose que HostNameLookups est
+ défini à On, de façon à ce que les adresses IP des clients puissent
+ être résolues. Dans le cas contraire, vous devez supprimer la
+ seconde condition, ainsi que le drapeau <code>[OR]</code> de la
+ première.
+ </p>
+ </dd>
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="referer-deflector" id="referer-deflector">Aiguillage basé sur l'en-tête Referer</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Redirige les requêtes en fonction du Referer de provenance de
+ la requête, avec des cibles différentes pour chaque Referer.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <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 />
+RewriteRule ^ ${deflector:%{HTTP_REFERER}} [R,L]
+</code></p></div>
+
+ <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>
+##<br />
+## deflector.map<br />
+##<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>
+
+ </dd>
+ </dl>
+
+</div></div>
+<div class="bottomlang">
+<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 id="footer">
+<p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+</body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
+<!-- English Revision : 1174747 -->
+<!-- French translation : Lucien GENTIS -->
+<!-- Reviewed by : Vincent Deffontaines -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<manualpage metafile="access.xml.meta">
+ <parentdocument href="./">Rewrite</parentdocument>
+
+<title>Utiliser mod_rewrite pour le contrôle d'accès</title>
+
+<summary>
+
+<p>Ce document est un complément à la <a
+href="../mod/mod_rewrite.html">documentation de référence</a> de
+<module>mod_rewrite</module>. Il explique comment utiliser
+<module>mod_rewrite</module> pour contrôler l'accès à diverses
+ressources, ainsi que d'autres techniques en rapport. Il contient de
+nombreux exemples d'utilisation courante de mod_rewrite avec une
+description détaillée de leur fonctionnement.</p>
+
+<note type="warning">Vous devez vous attacher à comprendre le
+fonctionnement des exemples, car la plupart d'entre eux ne
+fonctionneront pas sur votre système si vous vous contentez de les
+copier/coller dans vos fichiers de configuration.</note>
+
+</summary>
+<seealso><a href="../mod/mod_rewrite.html">Documentation du module mod_rewrite</a></seealso>
+<seealso><a href="intro.html">Introduction à mod_rewrite</a></seealso>
+<seealso><a href="remapping.html">Redirection et remise en
+correspondance</a></seealso>
+<!-- <seealso><a href="access.html">Contrôler l'accès</a></seealso> -->
+<seealso><a href="vhosts.html">Serveurs virtuels</a></seealso>
+<seealso><a href="proxy.html">Serveurs mandataires</a></seealso>
+<seealso><a href="rewritemap.html">Utilisation de RewriteMap</a></seealso>
+<seealso><a href="advanced.html">Techniques avancées</a></seealso>
+<seealso><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></seealso>
+
+ <section id="blocked-inline-images">
+
+ <title>Blocage du référencement à chaud (Hotlinking) d'images</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Cette technique vous permet d'interdire à d'autres sites
+ d'inclure directement vos images dans leurs pages. On fait
+ souvent référence à cette pratique sous le nom de
+ référencement à chaud (Hotlinking) qui entraîne l'utilisation
+ de votre bande passante pour servir des contenus faisant
+ partie du site de quelqu'un d'autre.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Cette technique repose sur la valeur de la variable
+ optionnelle <code>HTTP_REFERER</code>. Certaines personnes
+ pourront donc contourner cette limitation. Pour la plupart des
+ utilisateurs cependant, la requête échouera, en ce sens que
+ l'image ne sera pas affichée depuis le site tiers.</p>
+ <p>Il y a plusieurs manières de gérer cette situation.</p>
+
+ <p>Dans le premier exemple, nous rejetons tout simplement la
+ requête si elle ne provenait pas d'une page appartenant à notre
+ site. Pour les besoins de cet exemple, nous supposons que le nom
+ de votre site est <code>www.example.com</code>.</p>
+
+<!-- TODO: Add discussion here of why we have !^$ in there. -->
+
+<example>
+RewriteCond %{HTTP_REFERER} <strong>!^$</strong><br />
+RewriteCond %{HTTP_REFERER} !www.example.com [NC]<br />
+RewriteRule <strong>\.(gif|jpg|png)$</strong> - [F,NC]
+</example>
+
+ <p>Dans le second exemple, plutôt que de rejeter la requête,
+ nous affichons une autre image à la place.</p>
+
+<example>
+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]
+</example>
+
+ <p>Dans le troisième exemple, nous redirigeons la requête vers
+ une image appartenant à un autre site.</p>
+
+
+<example>
+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]
+</example>
+ <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
+ qu'ils s'attendent à voir.</p>
+
+ </dd>
+
+ <dt>Discussion :</dt>
+
+ <dd>
+ <p>Si vous ne voulez pas rediriger la requête, mais
+ simplement interdire l'accès à la ressource, vous pouvez y
+ parvenir sans utiliser mod_rewrite :</p>
+
+ <example>
+ 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>
+ </example>
+ </dd>
+ </dl>
+
+ </section>
+
+ <section id="blocking-of-robots">
+
+ <title>Blocage des robots</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>
+ Dans cet exemple, nous allons discuter d'une méthode permettant
+ de bloquer les requêtes persistentes en provenance d'un robot
+ particulier, ou d'un navigateur.</p>
+
+ <p>La méthode classique pour exclure un robot consiste à définir
+ un fichier, <code>/robots.txt</code> qui spécifie les parties de
+ votre site web pour lesquelles vous voulez exclure les robots.
+ Malheureusement, certains robots ne tiennent pas compte de ces
+ fichiers.
+ </p>
+
+ <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>
+ </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>
+
+ <p>Dans cet exemple, nous bloquons un robot nommé
+ <code>Vilain_Robot</code> pour le répertoire
+ <code>/secret/fichiers</code>. Si vous voulez bloquer ce client
+ seulement depuis une source particulière, vous pouvez aussi
+ spécifier un intervalle d'adresses IP.</p>
+
+<example>
+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>]
+</example>
+ </dd>
+
+ <dt>Discussion :</dt>
+
+ <dd>
+ <p>
+ Vous pouvez cependant parvenir au même résultat sans utiliser
+ mod_rewrite via la méthode alternative suivante :
+ </p>
+ <example>
+ 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>
+ </example>
+ <p>
+ Comme indiqué plus haut, il est aisé de contourner cette
+ technique, simplement en modifiant le contenu de l'en-tête
+ <code>USER_AGENT</code>. Si vous subissez une attaque en règle,
+ vous allez devoir réfléchir à un blocage à un niveau supérieur,
+ par exemple une règle de filtrage de votre pare-feu.
+ </p>
+
+ </dd>
+
+ </dl>
+
+ </section>
+
+<section id="host-deny">
+
+ <title>Rejet des clients contenus dans une liste noire</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons interdire l'accès à notre serveur aux clients
+ contenus dans une liste noire similaire à
+ <code>hosts.deny</code>.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+<example>
+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 />
+RewriteRule ^ - [F]
+</example>
+
+<example>
+##<br />
+## hosts.deny<br />
+##<br />
+## ATTENTION! Ceci est une table de correspondances, non une liste,<br />
+## même si elle est traitée comme telle. mod_rewrite<br />
+## l'interprète comme une liste de paires clé/valeur, et<br />
+## chaque entrée doit au moins posséder une valeur par<br />
+## défaut "-".<br />
+<br />
+193.102.180.41 -<br />
+bsdti1.sdm.de -<br />
+192.76.162.40 -<br />
+</example>
+ </dd>
+
+ <dt>Discussion :</dt>
+ <dd>
+ <p>
+ La seconde condition RewriteCond présuppose que HostNameLookups est
+ défini à On, de façon à ce que les adresses IP des clients puissent
+ être résolues. Dans le cas contraire, vous devez supprimer la
+ seconde condition, ainsi que le drapeau <code>[OR]</code> de la
+ première.
+ </p>
+ </dd>
+ </dl>
+
+</section>
+
+<section id="referer-deflector">
+
+ <title>Aiguillage basé sur l'en-tête Referer</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Redirige les requêtes en fonction du Referer de provenance de
+ la requête, avec des cibles différentes pour chaque Referer.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Le jeu de règles suivant utilise un fichier de correspondances pour
+ associer chaque Referer à une cible de redirection.</p>
+
+<example>
+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 />
+RewriteRule ^ ${deflector:%{HTTP_REFERER}} [R,L]
+</example>
+
+ <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>
+
+<example>
+##<br />
+## deflector.map<br />
+##<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/
+</example>
+
+ </dd>
+ </dl>
+
+</section>
+
+
+</manualpage>
<variants>
<variant>en</variant>
+ <variant>fr</variant>
</variants>
</metafile>
URI: advanced.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+
+URI: advanced.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ 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>
+<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 href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.4</p>
+<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>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English"> en </a></p>
+</div>
+
+
+<p>Ce document complète 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 présente un certain nombre
+ de techniques avancées quant à
+ l'utilisation de mod_rewrite.</p>
+
+<div class="warning">Notez que la plupart des exemples ne fonctionneront
+pas en l'état dans la configuration particulière de votre serveur ; il
+est donc important de bien comprendre leur fonctionnement, plutôt que de
+simplement les copier/coller dans votre configuration.</div>
+
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#sharding">Distribution de la charge entre plusieurs serveurs
+ d'arrière-plan en fonction de l'adresse IP</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#on-the-fly-content">Régéneration de contenu à la volée</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#load-balancing">Répartition de charge</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#autorefresh">Actualisation automatique d'un document</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#structuredhomedirs">Répertoires Home structurés</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#redirectanchors">Redirection des ancrages</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#time-dependent">Réécriture dépendant de l'heure</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#setenvvars">Définir des variables d'environnement en fonction de
+ certaines parties de l'URL</a></li>
+</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Documentation du module</a></li><li><a href="intro.html">Introduction à mod_rewrite</a></li><li><a href="remapping.html">Redirection et remise en
+correspondance</a></li><li><a href="access.html">Contrôler l'accès</a></li><li><a href="vhosts.html">serveurs virtuels</a></li><li><a href="proxy.html">serveurs mandataires</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="sharding" id="sharding">Distribution de la charge entre plusieurs serveurs
+ d'arrière-plan en fonction de l'adresse IP</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>La fragmentation ou "sharding" est une technique courante de
+ distribution de la charge du serveur ou de l'espace de stockage.
+ Quand on utilise cette méthode, un serveur frontal utilise l'URL
+ pour répartir de manière appropriée les utilisateurs et objets
+ entre différents serveurs d'arrière-plan.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>On maintient une table de correspondance entre utilisateurs et
+ serveurs cibles dans des fichiers externes. Ces derniers se
+ présentent comme suit :</p>
+
+<div class="example"><p><code>
+utilisateur1 serveur_physique_utilisateur1<br />
+utilisateur2 serveur_physique_utilisateur2<br />
+: :
+</code></p></div>
+
+ <p>Tout ceci est enregistré dans un fichier
+ <code>correspondances-utilisateurs-serveurs</code>. Le but est de
+ faire correspondre</p>
+
+<div class="example"><p><code>
+/u/utilisateur1/chemin
+</code></p></div>
+
+ <p>avec</p>
+
+<div class="example"><p><code>
+http://serveur_physique_utilisateur1/u/utilisateur/chemin
+</code></p></div>
+
+ <p>il n'est ainsi pas nécessaire que tous les chemins URL soient
+ valides sur tous les serveurs physiques d'arrière-plan. Le jeu de
+ règles suivant fait tout ceci pour nous, en s'appuyant sur les
+ fichiers de correspondances, en supposant que serveur0 est un
+ 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>
+ </dd>
+ </dl>
+
+ <p>Voir la documentation de <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> pour une description plus
+ approfondie de la syntaxe de cette directive.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="on-the-fly-content" id="on-the-fly-content">Régéneration de contenu à la volée</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons générer du contenu de manière dynamique, mais le
+ conserver de manière statique lorsqu'il a été généré. La règle
+ suivante vérifie l'existence du fichier statique, et le génère
+ s'il est absent. Les fichiers statiques peuvent être supprimés
+ périodiquement si on le désire (par exemple via cron), et seront
+ régénérés à la demande.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ À 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 />
+RewriteRule ^(.+)\.html$ /regenerate_page.cgi [PT,L]
+</code></p></div>
+
+ <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.
+ Pour ce faire, il utilise une sous-requête. Si cette sous-requête
+ échoue, ou en d'autres termes, si la ressource demandée n'existe pas,
+ cette règle invoque le programme CGI
+ <code>/regenerate_page.cgi</code> qui génère la ressource
+ demandée et la sauvegarde dans le répertoire des documents, de
+ façon à ce qu'une copie statique puisse être servie lors d'une
+ demande ultérieure.</p>
+
+ <p>De cette façon, les documents qui ne sont pas mis à jour
+ régulièrement peuvent être servis sous une forme statique. Si ces
+ documents doivent être réactualisés, on peut les supprimer du
+ répertoire des documents, et ils seront ainsi régénérés à la
+ prochaine demande.</p>
+ </dd>
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="load-balancing" id="load-balancing">Répartition de charge</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons répartir la charge de manière aléatoire entre
+ plusieurs serveurs en utilisant mod_rewrite.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <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 />
+RewriteRule ^/(.*) http://${lb:serveurs}/$1 [P,L]
+</code></p></div>
+
+<p><code>liste-serveurs.txt</code> contiendra la liste des serveurs :</p>
+
+<div class="example"><p><code>
+## liste-serveurs.txt<br />
+<br />
+serveurs un.example.com|deux.example.com|trois.example.com<br />
+</code></p></div>
+
+<p>Si vous voulez qu'un serveur se voit confier d'avantage de charge que
+les autres, faites le figurer plusieurs fois dans la liste.</p>
+
+ </dd>
+
+ <dt>Discussion</dt>
+ <dd>
+<p>Apache possède un module de répartition de charge -
+<code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> - beaucoup plus souple et présentant
+plus de fonctionnalités dans ce domaine que mod_rewrite.</p>
+ </dd>
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="autorefresh" id="autorefresh">Actualisation automatique d'un document</a></h2>
+
+
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Lorsque nous créons une page web complexe, ne serait-il pas
+ souhaitable que le navigateur web actualise automatiquement la
+ page chaque fois que nous en sauvegardons une nouvelle version
+ à partir de notre éditeur ? Impossible ?</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Non ! Nous allons pour cela combiner la fonctionnalité MIME
+ multipart, la fonctionnalité NPH du serveur web et la
+ puissance de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour la manipulation
+ d'URLs. Tout d'abord, nous définissons une nouvelle
+ fonctionnalité pour les URLs : l'ajout de
+ <code>:refresh</code> à toute URL fait que la 'page' est
+ actualisée chaque fois que la ressource est mise à jour dans
+ le système de fichiers.</p>
+
+<div class="example"><p><code>
+RewriteRule ^(/[uge]/[^/]+/?.*):refresh /interne/cgi/apache/nph-refresh?f=$
+</code></p></div>
+
+ <p>Nous appelons maintenant cette URL</p>
+
+<div class="example"><p><code>
+/u/foo/bar/page.html:refresh
+</code></p></div>
+
+ <p>ce qui entraîne en interne l'invocation de l'URL</p>
+
+<div class="example"><p><code>
+/interne/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
+</code></p></div>
+
+ <p>Il ne reste plus qu'à écrire le script NPH-CGI. Bien que l'on
+ écrive habituellement dans ces cas "laissé à la charge du
+ lecteur à titre d'exercice", ;-) je vous l'offre, aussi.</p>
+
+<div class="example"><pre>
+#!/sw/bin/perl
+##
+## nph-refresh -- script NPH/CGI pour l'actualisation automatique de
+## pages
+## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
+##
+$| = 1;
+
+# éclate la variable 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\"";
+}
+$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);
+}
+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);
+}
+
+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;
+}
+
+sub print_http_headers_multipart_next {
+print "\n--$bound\n";
+}
+
+sub print_http_headers_multipart_end {
+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;
+}
+
+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;
+}
+
+$buffer = &readfile($QS_f);
+&print_http_headers_multipart_begin;
+&displayhtml($buffer);
+
+sub mystat {
+local($file) = $_[0];
+local($time);
+
+($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;
+ }
+ sleep($QS_s);
+}
+}
+
+&print_http_headers_multipart_end;
+
+exit(0);
+
+##EOF##
+</pre></div>
+ </dd>
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="structuredhomedirs" id="structuredhomedirs">Répertoires Home structurés</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Certains sites avec des milliers d'utilisateurs organisent
+ les répertoires utilisateurs de manière structurée, c'est à
+ dire que chaque répertoire utilisateur se trouve dans un
+ sous-répertoire dont le nom commence (par exemple) par le
+ premier caractère du nom de l'utilisateur. Ainsi,
+ <code>/~larry/chemin</code> correspond à
+ <code>/home/<strong>l</strong>/larry/public_html/chemin</code>, alors
+ que <code>/~waldo/chemin</code> correspond à
+ <code>/home/<strong>w</strong>/waldo/public_html/chemin</code>.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <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 />
+RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/public_html$3
+</code></p></div>
+ </dd>
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="redirectanchors" id="redirectanchors">Redirection des ancrages</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Par défaut, la redirection vers un ancrage HTML ne fonctionne
+ pas, car mod_rewrite échappe le caractère <code>#</code> en le
+ transformant en <code>%23</code>, ce qui rend la redirection
+ inopérante.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>On utilise le drapeau <code>[NE]</code> dans la règle
+ <code>RewriteRule</code>. NE signifie "No Escape".
+ </p>
+ </dd>
+
+ <dt>Discussion :</dt>
+ <dd>Cette technique fonctionne bien entendu pour tout autre
+ caractère spécial que mod_rewrite, par défaut, code pour insertion
+ dans une URL.</dd>
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="time-dependent" id="time-dependent">Réécriture dépendant de l'heure</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons servir des contenus différents selon l'heure du
+ jour en utilisant mod_rewrite.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Il existe de nombreuses variables nommées
+ <code>TIME_xxx</code> utilisables dans les conditions de
+ réécriture. Utilisées en conjonction avec les modèles de
+ comparaison lexicographique spéciaux <code><STRING</code>,
+ <code>>STRING</code> et <code>=STRING</code>, elles
+ 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>
+
+ <p>Avec cet exemple, l'URL <code>foo.html</code> renvoie
+ le contenu de <code>foo.jour.html</code> durant le
+ créneau horaire <code>07:01-18:59</code>, et le contenu de
+ <code>foo.nuit.html</code> le reste du temps.</p>
+
+ <div class="warning"><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>, les mandataires
+ intermédiaires et les navigateurs peuvent chacun mettre en cache
+ les réponses et ainsi afficher une des deux pages en dehors de
+ 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>
+ </dl>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="setenvvars" id="setenvvars">Définir des variables d'environnement en fonction de
+ certaines parties de l'URL</a></h2>
+
+
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Ici, nous voulons conserver une certaine forme de statut
+ lorsqu'une réécriture a eu lieu. Par exemple, vous souhaitez
+ consigner le fait que cette réécriture a eu lieu, et vous servir
+ plus tard de cette information pour déterminer si une requête sera
+ concernée par cette réécriture. Pour y parvenir, on peut utiliser
+ une variable d'environnement.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Utiliser le drapeau [E] pour définir une variable
+ d'environnement.</p>
+
+<div class="example"><p><code>
+RewriteEngine on<br />
+RewriteRule ^/cheval/(.*) /poney/$1 [E=<strong>rewritten:1</strong>]
+</code></p></div>
+
+ <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>
+RewriteCond %{ENV:rewritten} =1
+</code></p></div>
+
+ </dd>
+ </dl>
+
+</div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English"> en </a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+</body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
+<!-- English Revision : 1174747 -->
+<!-- French translation : Lucien GENTIS -->
+<!-- Reviewed by : Vincent Deffontaines -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<manualpage metafile="avoid.xml.meta">
+ <parentdocument href="./">Rewrite</parentdocument>
+
+<title>Techniques avancées de réécriture avec mod_rewrite</title>
+
+<summary>
+
+<p>Ce document complète la <a
+ href="../mod/mod_rewrite.html">documentation de référence</a> du
+ module <module>mod_rewrite</module>. Il présente un certain nombre
+ de techniques avancées quant à
+ l'utilisation de mod_rewrite.</p>
+
+<note type="warning">Notez que la plupart des exemples ne fonctionneront
+pas en l'état dans la configuration particulière de votre serveur ; il
+est donc important de bien comprendre leur fonctionnement, plutôt que de
+simplement les copier/coller dans votre configuration.</note>
+
+</summary>
+<seealso><a href="../mod/mod_rewrite.html">Documentation du module</a></seealso>
+<seealso><a href="intro.html">Introduction à mod_rewrite</a></seealso>
+<seealso><a href="remapping.html">Redirection et remise en
+correspondance</a></seealso>
+<seealso><a href="access.html">Contrôler l'accès</a></seealso>
+<seealso><a href="vhosts.html">serveurs virtuels</a></seealso>
+<seealso><a href="proxy.html">serveurs mandataires</a></seealso>
+<seealso><a href="rewritemap.html">Utilisation de RewriteMap</a></seealso>
+<!--<seealso><a href="advanced.html">Techniques avancées</a></seealso>-->
+<seealso><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></seealso>
+
+<section id="sharding">
+
+ <title>Distribution de la charge entre plusieurs serveurs
+ d'arrière-plan en fonction de l'adresse IP</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>La fragmentation ou "sharding" est une technique courante de
+ distribution de la charge du serveur ou de l'espace de stockage.
+ Quand on utilise cette méthode, un serveur frontal utilise l'URL
+ pour répartir de manière appropriée les utilisateurs et objets
+ entre différents serveurs d'arrière-plan.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>On maintient une table de correspondance entre utilisateurs et
+ serveurs cibles dans des fichiers externes. Ces derniers se
+ présentent comme suit :</p>
+
+<example>
+utilisateur1 serveur_physique_utilisateur1<br />
+utilisateur2 serveur_physique_utilisateur2<br />
+: :
+</example>
+
+ <p>Tout ceci est enregistré dans un fichier
+ <code>correspondances-utilisateurs-serveurs</code>. Le but est de
+ faire correspondre</p>
+
+<example>
+/u/utilisateur1/chemin
+</example>
+
+ <p>avec</p>
+
+<example>
+http://serveur_physique_utilisateur1/u/utilisateur/chemin
+</example>
+
+ <p>il n'est ainsi pas nécessaire que tous les chemins URL soient
+ valides sur tous les serveurs physiques d'arrière-plan. Le jeu de
+ règles suivant fait tout ceci pour nous, en s'appuyant sur les
+ fichiers de correspondances, en supposant que serveur0 est un
+ serveur par défaut qui sera utilisé lorsqu'un utilisateur ne
+ possèdera pas d'entrée dans la table de correspondances :</p>
+
+<example>
+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
+</example>
+ </dd>
+ </dl>
+
+ <p>Voir la documentation de <directive
+ module="mod_rewrite">RewriteMap</directive> pour une description plus
+ approfondie de la syntaxe de cette directive.</p>
+
+</section>
+
+<section id="on-the-fly-content">
+
+ <title>Régéneration de contenu à la volée</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons générer du contenu de manière dynamique, mais le
+ conserver de manière statique lorsqu'il a été généré. La règle
+ suivante vérifie l'existence du fichier statique, et le génère
+ s'il est absent. Les fichiers statiques peuvent être supprimés
+ périodiquement si on le désire (par exemple via cron), et seront
+ régénérés à la demande.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ À cet effet, on utilise le jeu de règles suivant :
+
+<example>
+# Cet exemple n'est valable que dans un contexte de répertoire<br />
+RewriteCond %{REQUEST_URI} <strong>!-U</strong><br />
+RewriteRule ^(.+)\.html$ /regenerate_page.cgi [PT,L]
+</example>
+
+ <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.
+ Pour ce faire, il utilise une sous-requête. Si cette sous-requête
+ échoue, ou en d'autres termes, si la ressource demandée n'existe pas,
+ cette règle invoque le programme CGI
+ <code>/regenerate_page.cgi</code> qui génère la ressource
+ demandée et la sauvegarde dans le répertoire des documents, de
+ façon à ce qu'une copie statique puisse être servie lors d'une
+ demande ultérieure.</p>
+
+ <p>De cette façon, les documents qui ne sont pas mis à jour
+ régulièrement peuvent être servis sous une forme statique. Si ces
+ documents doivent être réactualisés, on peut les supprimer du
+ répertoire des documents, et ils seront ainsi régénérés à la
+ prochaine demande.</p>
+ </dd>
+ </dl>
+
+</section>
+
+<section id="load-balancing">
+
+ <title>Répartition de charge</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons répartir la charge de manière aléatoire entre
+ plusieurs serveurs en utilisant mod_rewrite.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Pour y parvenir, nous allons utiliser la directive <directive
+ module="mod_rewrite">RewriteMap</directive> et une liste de
+ serveurs.</p>
+
+<example>
+RewriteEngine on<br />
+RewriteMap lb rnd:/chemin/vers/liste-serveurs.txt<br />
+<br />
+RewriteRule ^/(.*) http://${lb:serveurs}/$1 [P,L]
+</example>
+
+<p><code>liste-serveurs.txt</code> contiendra la liste des serveurs :</p>
+
+<example>
+## liste-serveurs.txt<br />
+<br />
+serveurs un.example.com|deux.example.com|trois.example.com<br />
+</example>
+
+<p>Si vous voulez qu'un serveur se voit confier d'avantage de charge que
+les autres, faites le figurer plusieurs fois dans la liste.</p>
+
+ </dd>
+
+ <dt>Discussion</dt>
+ <dd>
+<p>Apache possède un module de répartition de charge -
+<module>mod_proxy_balancer</module> - beaucoup plus souple et présentant
+plus de fonctionnalités dans ce domaine que mod_rewrite.</p>
+ </dd>
+ </dl>
+
+</section>
+
+<section id="autorefresh">
+
+ <title>Actualisation automatique d'un document</title>
+
+ <!--
++I'm trying to decide whether this example is worthwhile to keep, and, if
++so, whether it needs to be updated/rewritten. Certainly the description
++needs to be rewritten. I'm not sure we really need to be recommending
++nph-refresh techniques.
++-->
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Lorsque nous créons une page web complexe, ne serait-il pas
+ souhaitable que le navigateur web actualise automatiquement la
+ page chaque fois que nous en sauvegardons une nouvelle version
+ à partir de notre éditeur ? Impossible ?</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Non ! Nous allons pour cela combiner la fonctionnalité MIME
+ multipart, la fonctionnalité NPH du serveur web et la
+ puissance de <module>mod_rewrite</module> pour la manipulation
+ d'URLs. Tout d'abord, nous définissons une nouvelle
+ fonctionnalité pour les URLs : l'ajout de
+ <code>:refresh</code> à toute URL fait que la 'page' est
+ actualisée chaque fois que la ressource est mise à jour dans
+ le système de fichiers.</p>
+
+<example>
+RewriteRule ^(/[uge]/[^/]+/?.*):refresh /interne/cgi/apache/nph-refresh?f=$
+</example>
+
+ <p>Nous appelons maintenant cette URL</p>
+
+<example>
+/u/foo/bar/page.html:refresh
+</example>
+
+ <p>ce qui entraîne en interne l'invocation de l'URL</p>
+
+<example>
+/interne/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
+</example>
+
+ <p>Il ne reste plus qu'à écrire le script NPH-CGI. Bien que l'on
+ écrive habituellement dans ces cas "laissé à la charge du
+ lecteur à titre d'exercice", ;-) je vous l'offre, aussi.</p>
+
+<example><pre>
+#!/sw/bin/perl
+##
+## nph-refresh -- script NPH/CGI pour l'actualisation automatique de
+## pages
+## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
+##
+$| = 1;
+
+# éclate la variable 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\"";
+}
+$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);
+}
+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);
+}
+
+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;
+}
+
+sub print_http_headers_multipart_next {
+print "\n--$bound\n";
+}
+
+sub print_http_headers_multipart_end {
+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;
+}
+
+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;
+}
+
+$buffer = &readfile($QS_f);
+&print_http_headers_multipart_begin;
+&displayhtml($buffer);
+
+sub mystat {
+local($file) = $_[0];
+local($time);
+
+($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;
+ }
+ sleep($QS_s);
+}
+}
+
+&print_http_headers_multipart_end;
+
+exit(0);
+
+##EOF##
+</pre></example>
+ </dd>
+ </dl>
+
+</section>
+
+<section id="structuredhomedirs">
+
+ <title>Répertoires Home structurés</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Certains sites avec des milliers d'utilisateurs organisent
+ les répertoires utilisateurs de manière structurée, c'est à
+ dire que chaque répertoire utilisateur se trouve dans un
+ sous-répertoire dont le nom commence (par exemple) par le
+ premier caractère du nom de l'utilisateur. Ainsi,
+ <code>/~larry/chemin</code> correspond à
+ <code>/home/<strong>l</strong>/larry/public_html/chemin</code>, alors
+ que <code>/~waldo/chemin</code> correspond à
+ <code>/home/<strong>w</strong>/waldo/public_html/chemin</code>.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <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>
+
+<example>
+RewriteEngine on<br />
+RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/public_html$3
+</example>
+ </dd>
+ </dl>
+
+</section>
+
+<section id="redirectanchors">
+
+ <title>Redirection des ancrages</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Par défaut, la redirection vers un ancrage HTML ne fonctionne
+ pas, car mod_rewrite échappe le caractère <code>#</code> en le
+ transformant en <code>%23</code>, ce qui rend la redirection
+ inopérante.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>On utilise le drapeau <code>[NE]</code> dans la règle
+ <code>RewriteRule</code>. NE signifie "No Escape".
+ </p>
+ </dd>
+
+ <dt>Discussion :</dt>
+ <dd>Cette technique fonctionne bien entendu pour tout autre
+ caractère spécial que mod_rewrite, par défaut, code pour insertion
+ dans une URL.</dd>
+ </dl>
+
+</section>
+
+<section id="time-dependent">
+
+ <title>Réécriture dépendant de l'heure</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Nous voulons servir des contenus différents selon l'heure du
+ jour en utilisant mod_rewrite.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Il existe de nombreuses variables nommées
+ <code>TIME_xxx</code> utilisables dans les conditions de
+ réécriture. Utilisées en conjonction avec les modèles de
+ comparaison lexicographique spéciaux <code><STRING</code>,
+ <code>>STRING</code> et <code>=STRING</code>, elles
+ permettent d'effectuer des redirections dépendant de
+ l'heure :</p>
+
+<example>
+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
+</example>
+
+ <p>Avec cet exemple, l'URL <code>foo.html</code> renvoie
+ le contenu de <code>foo.jour.html</code> durant le
+ créneau horaire <code>07:01-18:59</code>, et le contenu de
+ <code>foo.nuit.html</code> le reste du temps.</p>
+
+ <note type="warning"><module>mod_cache</module>, les mandataires
+ intermédiaires et les navigateurs peuvent chacun mettre en cache
+ les réponses et ainsi afficher une des deux pages en dehors de
+ la fenêtre de temps configurée. On peut utiliser
+ <module>mod_expires</module> 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.</note> </dd>
+ </dl>
+
+</section>
+
+<section id="setenvvars">
+
+ <title>Définir des variables d'environnement en fonction de
+ certaines parties de l'URL</title>
+
+ <dl>
+ <dt>Description :</dt>
+
+ <dd>
+ <p>Ici, nous voulons conserver une certaine forme de statut
+ lorsqu'une réécriture a eu lieu. Par exemple, vous souhaitez
+ consigner le fait que cette réécriture a eu lieu, et vous servir
+ plus tard de cette information pour déterminer si une requête sera
+ concernée par cette réécriture. Pour y parvenir, on peut utiliser
+ une variable d'environnement.</p>
+ </dd>
+
+ <dt>Solution :</dt>
+
+ <dd>
+ <p>Utiliser le drapeau [E] pour définir une variable
+ d'environnement.</p>
+
+<example>
+RewriteEngine on<br />
+RewriteRule ^/cheval/(.*) /poney/$1 [E=<strong>rewritten:1</strong>]
+</example>
+
+ <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>
+
+<example>
+RewriteCond %{ENV:rewritten} =1
+</example>
+
+ </dd>
+ </dl>
+
+</section>
+
+</manualpage>
<variants>
<variant>en</variant>
+ <variant>fr</variant>
</variants>
</metafile>
URI: avoid.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+
+URI: avoid.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Quand ne pas utiliser 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 href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.4</p>
+<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>Quand ne pas utiliser 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>
+
+
+<p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">Documentation de référence</a> de
+<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Il décrit peut-être un des concepts les
+plus importants à propos de mod_rewrite - à savoir, quand doit-on éviter
+de l'utiliser.</p>
+
+<p>mod_rewrite doit être considéré comme un dernier recours,
+lorsqu'aucune alternative n'est possible. Utiliser mod_rewrite lorsqu'il
+existe des alternatives plus simples conduit à des configurations
+confuses, fragiles, et difficiles à maintenir. La compréhension des
+autres alternatives disponibles est une étape très importante sur le
+chemin de la maîtrise de mod_rewrite.</p>
+
+<p>Vous devez vous attacher à comprendre le
+fonctionnement des exemples, car la plupart d'entre eux ne
+fonctionneront pas sur votre système si vous vous contentez de les
+copier/coller dans vos fichiers de configuration.</p>
+
+<p>Le cas le plus courant dans lequel <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est
+l'outil approprié est la situation où la seule solution envisageable
+nécessite l'accès aux fichiers de configuration du serveur, alors que
+cet accès ne vous est pas accordé. Certaines directives de configuration
+ne sont disponibles que dans le fichier de configuration du serveur. Si
+vous ne pouvez agir que sur les fichiers .htaccess, vous devrez donc
+vous tourner vers <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
+
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirection simple</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#alias">Alias d'URL</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#vhosts">Hébergement virtuel</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#proxy">Mandat simple</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#setenv">Test de variables d'environnement</a></li>
+</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Documentation du module mod_rewrite</a></li><li><a href="intro.html">Introduction à mod_rewrite</a></li><li><a href="remapping.html">Redirection et remise en
+correspondance</a></li><li><a href="access.html">Contrôle d'accès</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="proxy.html">Serveurs mandataires</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="advanced.html">Techniques avancées</a></li></ul></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 simple</a></h2>
+
+
+<p><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> fournit les directives <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> et <code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> qui permettent de
+rediriger une URL vers une autre. Plutôt que d'utiliser la directive
+<code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> pour ce genre de
+redirection simple d'une URL ou d'une classe d'URLs vers une autre, on
+préfèrera l'utilisation de ces directives. En outre, avec
+<code>RedirectMatch</code>, vous pouvez inclure une expression
+rationnelle dans votre critère de redirection, ce qui vous permet de
+bénéficier de nombreux avantages de la directive
+<code>RewriteRule</code>.</p>
+
+<p>Une utilisation courante de la directive <code>RewriteRule</code> est
+la redirection de toute une classe d'URLs. Par exemple, toutes les URLs
+faisant référence au répertoire <code>/un</code> doivent être
+redirigées vers <code>http://un.example.com/</code>, ou toutes les
+requêtes <code>http</code> doivent être redirigées vers
+<code>https</code>.</p>
+
+<p>Pour ce faire, il est préférable d'utiliser la directive
+<code>Redirect</code>. Souvenez-vous que la directive
+<code>Redirect</code> conserve les informations relatives au chemin. En
+d'autres termes, la redirection d'une URL <code>/un</code> va aussi
+rediriger toutes les URLs de niveaux inférieurs comme
+<code>/un/deux.html</code> et <code>/un/trois/quatre.html</code>.</p>
+
+<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>
+
+<p>Pour rediriger les URLs <code>http</code> vers <code>https</code>,
+utilisez cette définition :</p>
+
+<div class="example"><p><code>
+<VirtualHost *:80>
+ServerName www.example.com<br />
+Redirect / https://www.example.com/<br />
+</VirtualHost >
+<br />
+<VirtualHost *:443>
+ServerName www.example.com<br />
+<br />
+# ... insérer ici la configuration SSL<br />
+</VirtualHost >
+</code></p></div>
+
+<p>L'utilisation de la directive <code>RewriteRule</code> pour accomplir
+cette tâche peut se justifier s'il existe d'autres directives
+<code>RewriteRule</code> dans la même portée. En effet, lorsque des
+directives <code>Redirect</code> et <code>RewriteRule</code> se trouvent
+dans la même portée, les directives <code>RewriteRule</code> sont
+exécutées en premier, sans tenir compte de leur ordre d'apparition dans
+le fichier de configuration.</p>
+
+<p>Dans le cas de la redirection <em>http-vers-https</em>, l'utilisation
+de règles <code>RewriteRule</code> se justifie si vous n'avez pas accès
+au fichier de configuration principal, et devez donc accomplir cette
+tâche au sein d'un fichier <code>.htaccess</code>.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="alias" id="alias">Alias d'URL</a></h2>
+<p>La directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> permet
+de mettre en correspondance un URI avec un répertoire, ce dernier étant
+en général situé en dehors de l'arborescence définie par la directive
+<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. Bien qu'il soit
+possible d'effectuer cette mise en correspondance avec
+<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>
+
+<p>
+Pour effectuer cette mise en correspondance, <code>mod_rewrite</code>
+s'impose si vous n'avez pas accès aux fichiers de configuration du
+serveur. En effet, la directive Alias ne peut pas être utilisée dans un
+fichier <code>.htaccess</code>, mais seulement dans un contexte de
+serveur principal ou de serveur virtuel.
+</p>
+
+<p>En outre, vous pouvez arriver au même résultat avec les liens
+symboliques, pourvu que <code>Options FollowSymLinks</code> soit activé
+sur votre serveur.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="vhosts" id="vhosts">Hébergement virtuel</a></h2>
+<p>Bien qu'il soit possible de gérer les <a href="vhosts.html">serveurs
+virtuels avec mod_rewrite</a>, il s'agit rarement de la bonne méthode.
+Il est pratiquement toujours préférable de créer des blocs
+<VirtualHost> individuels. Dans l'éventualité où vous devez gérer
+un grand nombre de serveurs virtuels, vous devez vous tourner vers
+<code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> pour créer ces serveurs
+automatiquement.</p>
+
+<p>Il est aussi possible d'utiliser des modules tiers comme <a href="http://www.cri.ensmp.fr/~coelho/mod_macro/">mod_macro</a> pour
+créer un grand nombre de serveurs virtuels dynamiquement.</p>
+
+<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
+fichiers <code>.htaccess</code>.</p>
+
+<p>Voir le document <a href="vhosts.html">création de serveurs virtuels
+avec mod_rewrite</a> pour plus de détails sur la manière d'y parvenir si
+cela semble être tout de même la meilleure approche.</p>
+
+</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">Mandat simple</a></h2>
+
+<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>
+RewriteRule ^/?images(.*) http://serveur-images.local/images$1 [P]
+</code></p></div>
+
+<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>
+ProxyPass /images/ http://serveur-images.local/images/
+</code></p></div>
+
+<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>
+ProxyPassReverse /images/ http://serveur-images.local/images/
+</code></p></div>
+
+<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,
+car elles agissent en général avant les directives
+<code>ProxyPass</code>, et peuvent ainsi les court-circuiter.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="setenv" id="setenv">Test de variables d'environnement</a></h2>
+
+<p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est souvent utilisé pour effectuer une
+action en fonction de la présence ou de l'absence d'une variable
+d'environnement particulière ou d'un en-tête de requête, ce qui peut
+être accompli de manière plus efficace via la directive <code class="directive"><a href="../mod/core.html#if"><If></a></code>.</p>
+
+<p>Considérons par exemple le scénario courant où la directive
+<code class="directive">RewriteRule</code> est utilisée pour forcer un nom
+d'hôte canonique, tel que <code>www.example.com</code> au lieu de
+<code>example.com</code>. Il est possible d'utiliser à la place la
+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 />
+</If>
+</code></p></div>
+
+<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
+en fonction d'en-têtes de requêtes ou de réponses, ou de variables
+d'environnement.</p>
+
+<p>Voir en particulier la <a href="../expr.html">documentation sur
+l'évaluation des expressions</a> pour une vue d'ensemble des types
+d'expressions que vous pouvez utiliser dans les sections <If>,
+ainsi que dans certaines directives.</p>
+
+</div></div>
+<div class="bottomlang">
+<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 id="footer">
+<p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+</body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
+<!-- English Revision : 1188464 -->
+<!-- French translation : Lucien GENTIS -->
+<!-- Reviewed by : Vincent Deffontaines -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<manualpage metafile="avoid.xml.meta">
+ <parentdocument href="./">Rewrite</parentdocument>
+
+<title>Quand ne pas utiliser mod_rewrite</title>
+
+<summary>
+
+<p>Ce document est un complément à la <a
+href="../mod/mod_rewrite.html">Documentation de référence</a> de
+<module>mod_rewrite</module>. Il décrit peut-être un des concepts les
+plus importants à propos de mod_rewrite - à savoir, quand doit-on éviter
+de l'utiliser.</p>
+
+<p>mod_rewrite doit être considéré comme un dernier recours,
+lorsqu'aucune alternative n'est possible. Utiliser mod_rewrite lorsqu'il
+existe des alternatives plus simples conduit à des configurations
+confuses, fragiles, et difficiles à maintenir. La compréhension des
+autres alternatives disponibles est une étape très importante sur le
+chemin de la maîtrise de mod_rewrite.</p>
+
+<p>Vous devez vous attacher à comprendre le
+fonctionnement des exemples, car la plupart d'entre eux ne
+fonctionneront pas sur votre système si vous vous contentez de les
+copier/coller dans vos fichiers de configuration.</p>
+
+<p>Le cas le plus courant dans lequel <module>mod_rewrite</module> est
+l'outil approprié est la situation où la seule solution envisageable
+nécessite l'accès aux fichiers de configuration du serveur, alors que
+cet accès ne vous est pas accordé. Certaines directives de configuration
+ne sont disponibles que dans le fichier de configuration du serveur. Si
+vous ne pouvez agir que sur les fichiers .htaccess, vous devrez donc
+vous tourner vers <module>mod_rewrite</module>.</p>
+
+</summary>
+<seealso><a href="../mod/mod_rewrite.html">Documentation du module mod_rewrite</a></seealso>
+<seealso><a href="intro.html">Introduction à mod_rewrite</a></seealso>
+<seealso><a href="remapping.html">Redirection et remise en
+correspondance</a></seealso>
+<seealso><a href="access.html">Contrôle d'accès</a></seealso>
+<seealso><a href="vhosts.html">Serveurs virtuels</a></seealso>
+<seealso><a href="proxy.html">Serveurs mandataires</a></seealso>
+<seealso><a href="rewritemap.html">Utilisation de RewriteMap</a></seealso>
+<seealso><a href="advanced.html">Techniques avancées</a></seealso>
+<!--<seealso><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></seealso>-->
+
+<section id="redirect">
+<title>Redirection simple</title>
+
+<p><module>mod_alias</module> fournit les directives <directive
+module="mod_alias">Redirect</directive> et <directive
+module="mod_alias">RedirectMatch</directive> qui permettent de
+rediriger une URL vers une autre. Plutôt que d'utiliser la directive
+<directive module="mod_rewrite">RewriteRule</directive> pour ce genre de
+redirection simple d'une URL ou d'une classe d'URLs vers une autre, on
+préfèrera l'utilisation de ces directives. En outre, avec
+<code>RedirectMatch</code>, vous pouvez inclure une expression
+rationnelle dans votre critère de redirection, ce qui vous permet de
+bénéficier de nombreux avantages de la directive
+<code>RewriteRule</code>.</p>
+
+<p>Une utilisation courante de la directive <code>RewriteRule</code> est
+la redirection de toute une classe d'URLs. Par exemple, toutes les URLs
+faisant référence au répertoire <code>/un</code> doivent être
+redirigées vers <code>http://un.example.com/</code>, ou toutes les
+requêtes <code>http</code> doivent être redirigées vers
+<code>https</code>.</p>
+
+<p>Pour ce faire, il est préférable d'utiliser la directive
+<code>Redirect</code>. Souvenez-vous que la directive
+<code>Redirect</code> conserve les informations relatives au chemin. En
+d'autres termes, la redirection d'une URL <code>/un</code> va aussi
+rediriger toutes les URLs de niveaux inférieurs comme
+<code>/un/deux.html</code> et <code>/un/trois/quatre.html</code>.</p>
+
+<p>Pour rediriger les URLs sous <code>/un</code> vers
+<code>http://un.example.com/</code>, utilisez cette définition :</p>
+
+<example>
+Redirect /un/ http://un.example.com/
+</example>
+
+<p>Pour rediriger les URLs <code>http</code> vers <code>https</code>,
+utilisez cette définition :</p>
+
+<example>
+<VirtualHost *:80>
+ServerName www.example.com<br />
+Redirect / https://www.example.com/<br />
+</VirtualHost >
+<br />
+<VirtualHost *:443>
+ServerName www.example.com<br />
+<br />
+# ... insérer ici la configuration SSL<br />
+</VirtualHost >
+</example>
+
+<p>L'utilisation de la directive <code>RewriteRule</code> pour accomplir
+cette tâche peut se justifier s'il existe d'autres directives
+<code>RewriteRule</code> dans la même portée. En effet, lorsque des
+directives <code>Redirect</code> et <code>RewriteRule</code> se trouvent
+dans la même portée, les directives <code>RewriteRule</code> sont
+exécutées en premier, sans tenir compte de leur ordre d'apparition dans
+le fichier de configuration.</p>
+
+<p>Dans le cas de la redirection <em>http-vers-https</em>, l'utilisation
+de règles <code>RewriteRule</code> se justifie si vous n'avez pas accès
+au fichier de configuration principal, et devez donc accomplir cette
+tâche au sein d'un fichier <code>.htaccess</code>.</p>
+
+</section>
+
+<section id="alias"><title>Alias d'URL</title>
+<p>La directive <directive module="mod_alias">Alias</directive> permet
+de mettre en correspondance un URI avec un répertoire, ce dernier étant
+en général situé en dehors de l'arborescence définie par la directive
+<directive module="core">DocumentRoot</directive>. Bien qu'il soit
+possible d'effectuer cette mise en correspondance avec
+<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>
+
+<example><title>Utilisation de la directive Alias</title>
+Alias /chats /var/www/virtualhosts/felin/htdocs
+</example>
+
+<p>
+Pour effectuer cette mise en correspondance, <code>mod_rewrite</code>
+s'impose si vous n'avez pas accès aux fichiers de configuration du
+serveur. En effet, la directive Alias ne peut pas être utilisée dans un
+fichier <code>.htaccess</code>, mais seulement dans un contexte de
+serveur principal ou de serveur virtuel.
+</p>
+
+<p>En outre, vous pouvez arriver au même résultat avec les liens
+symboliques, pourvu que <code>Options FollowSymLinks</code> soit activé
+sur votre serveur.</p>
+</section>
+
+<section id="vhosts"><title>Hébergement virtuel</title>
+<p>Bien qu'il soit possible de gérer les <a href="vhosts.html">serveurs
+virtuels avec mod_rewrite</a>, il s'agit rarement de la bonne méthode.
+Il est pratiquement toujours préférable de créer des blocs
+<VirtualHost> individuels. Dans l'éventualité où vous devez gérer
+un grand nombre de serveurs virtuels, vous devez vous tourner vers
+<module>mod_vhost_alias</module> pour créer ces serveurs
+automatiquement.</p>
+
+<p>Il est aussi possible d'utiliser des modules tiers comme <a
+href="http://www.cri.ensmp.fr/~coelho/mod_macro/">mod_macro</a> pour
+créer un grand nombre de serveurs virtuels dynamiquement.</p>
+
+<p>L'utilisation de <module>mod_rewrite</module> 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
+fichiers <code>.htaccess</code>.</p>
+
+<p>Voir le document <a href="vhosts.html">création de serveurs virtuels
+avec mod_rewrite</a> pour plus de détails sur la manière d'y parvenir si
+cela semble être tout de même la meilleure approche.</p>
+
+</section>
+
+<section id="proxy"><title>Mandat simple</title>
+
+<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 <module>mod_proxy</module>.</p>
+
+<example>
+RewriteRule ^/?images(.*) http://serveur-images.local/images$1 [P]
+</example>
+
+<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 <directive
+module="mod_proxy">ProxyPass</directive>. L'exemple précédent pourrait
+être remplacé par :</p>
+
+<example>
+ProxyPass /images/ http://serveur-images.local/images/
+</example>
+
+<p>Que vous utilisiez <directive
+module="mod_rewrite">RewriteRule</directive> ou <directive
+module="mod_proxy">ProxyPass</directive>, vous devrez dans tous les cas
+utiliser aussi la directive <directive
+module="mod_proxy">ProxyPassReverse</directive> pour intercepter les
+redirections en provenance du serveur d'arrière-plan :</p>
+
+<example>
+ProxyPassReverse /images/ http://serveur-images.local/images/
+</example>
+
+<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,
+car elles agissent en général avant les directives
+<code>ProxyPass</code>, et peuvent ainsi les court-circuiter.</p>
+
+</section>
+
+<section id="setenv"><title>Test de variables d'environnement</title>
+
+<p><module>mod_rewrite</module> est souvent utilisé pour effectuer une
+action en fonction de la présence ou de l'absence d'une variable
+d'environnement particulière ou d'un en-tête de requête, ce qui peut
+être accompli de manière plus efficace via la directive <directive
+module="core" type="section">If</directive>.</p>
+
+<p>Considérons par exemple le scénario courant où la directive
+<directive>RewriteRule</directive> est utilisée pour forcer un nom
+d'hôte canonique, tel que <code>www.example.com</code> au lieu de
+<code>example.com</code>. Il est possible d'utiliser à la place la
+directive <directive module="core" type="section">If</directive> comme
+suit :</p>
+
+<example>
+<If "$req{Host} != 'www.example.com'"><br />
+RedirectMatch (.*) http://www.example.com$1<br />
+</If>
+</example>
+
+<p>On peut utiliser cette technique dans de nombreux scénarios courants
+en remplacement de <module>mod_rewrite</module> pour effectuer des actions
+en fonction d'en-têtes de requêtes ou de réponses, ou de variables
+d'environnement.</p>
+
+<p>Voir en particulier la <a href="../expr.html">documentation sur
+l'évaluation des expressions</a> pour une vue d'ensemble des types
+d'expressions que vous pouvez utiliser dans les sections <If>,
+ainsi que dans certaines directives.</p>
+
+</section>
+
+</manualpage>
+
<variants>
<variant>en</variant>
+ <variant>fr</variant>
</variants>
</metafile>
URI: htaccess.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+
+URI: htaccess.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>mod_rewrite et les fichiers .htaccess - 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 href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.4</p>
+<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>mod_rewrite et les fichiers .htaccess</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="../en/rewrite/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../fr/rewrite/htaccess.html" title="Français"> fr </a></p>
+</div>
+
+
+<p>Ce document est un complément de 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 changements apportés aux règles
+lorsqu'on utilise mod_rewrite dans les fichiers .htaccess, et comment
+travailler avec ces changements.</p>
+
+</div>
+<div id="quickview"><h3>Voir aussi</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Documentation du module mod_rewrite</a></li><li><a href="intro.html">Introduction à mod_rewrite</a></li><li><a href="remapping.html">Redirection et remise en
+correspondance</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="proxy.html">Serveurs mandataires</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="advanced.html">Techniques avancées</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul></div>
+</div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="../en/rewrite/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |
+<a href="../fr/rewrite/htaccess.html" title="Français"> fr </a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+</body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
+<!-- English Revision : 1174747 -->
+<!-- French translation : Lucien GENTIS -->
+<!-- Reviewed by : Vincent Deffontaines -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<manualpage metafile="htaccess.xml.meta">
+ <parentdocument href="./">Rewrite</parentdocument>
+
+<title>mod_rewrite et les fichiers .htaccess</title>
+
+<summary>
+
+<p>Ce document est un complément de la <a
+href="../mod/mod_rewrite.html">documentation de référence</a> du module
+<module>mod_rewrite</module>. Il décrit les changements apportés aux règles
+lorsqu'on utilise mod_rewrite dans les fichiers .htaccess, et comment
+travailler avec ces changements.</p>
+
+</summary>
+<seealso><a href="../mod/mod_rewrite.html">Documentation du module mod_rewrite</a></seealso>
+<seealso><a href="intro.html">Introduction à mod_rewrite</a></seealso>
+<seealso><a href="remapping.html">Redirection et remise en
+correspondance</a></seealso>
+<!-- <seealso><a href="access.html">Controlling access</a></seealso> -->
+<seealso><a href="vhosts.html">Serveurs virtuels</a></seealso>
+<seealso><a href="proxy.html">Serveurs mandataires</a></seealso>
+<seealso><a href="rewritemap.html">Utilisation de RewriteMap</a></seealso>
+<seealso><a href="advanced.html">Techniques avancées</a></seealso>
+<seealso><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></seealso>
+
+</manualpage>
<variants>
<variant>en</variant>
+ <variant>fr</variant>
</variants>
</metafile>