]> granicus.if.org Git - apache/commitdiff
A package of rewrite docs translated into french
authorVincent Deffontaines <gryzor@apache.org>
Fri, 9 Mar 2012 23:19:10 +0000 (23:19 +0000)
committerVincent Deffontaines <gryzor@apache.org>
Fri, 9 Mar 2012 23:19:10 +0000 (23:19 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1299097 13f79535-47bb-0310-9956-ffa450edef68

16 files changed:
docs/manual/rewrite/access.html
docs/manual/rewrite/access.html.fr [new file with mode: 0644]
docs/manual/rewrite/access.xml.fr [new file with mode: 0644]
docs/manual/rewrite/access.xml.meta
docs/manual/rewrite/advanced.html
docs/manual/rewrite/advanced.html.fr [new file with mode: 0644]
docs/manual/rewrite/advanced.xml.fr [new file with mode: 0644]
docs/manual/rewrite/advanced.xml.meta
docs/manual/rewrite/avoid.html
docs/manual/rewrite/avoid.html.fr [new file with mode: 0644]
docs/manual/rewrite/avoid.xml.fr [new file with mode: 0644]
docs/manual/rewrite/avoid.xml.meta
docs/manual/rewrite/htaccess.html
docs/manual/rewrite/htaccess.html.fr [new file with mode: 0644]
docs/manual/rewrite/htaccess.xml.fr [new file with mode: 0644]
docs/manual/rewrite/htaccess.xml.meta

index dad5faec447c35f64d154067bbfc00ba6b8afd96..0ce25e0e0a866cd85b14afa34d8ce58f6d8d50b9 100644 (file)
@@ -3,3 +3,7 @@
 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
diff --git a/docs/manual/rewrite/access.html.fr b/docs/manual/rewrite/access.html.fr
new file mode 100644 (file)
index 0000000..861e808
--- /dev/null
@@ -0,0 +1,316 @@
+<?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="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <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">&nbsp;en&nbsp;</a> |
+<a href="../fr/rewrite/access.html" title="Français">&nbsp;fr&nbsp;</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 />
+        &lt;FilesMatch \.(jpg|png|gif)$&gt;<br />
+        Order deny,allow<br />
+        Deny from all<br />
+        Allow from env=localreferer<br />
+        &lt;/FilesMatch&gt;
+        </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 />
+      &lt;Location /secret/fichiers&gt;<br />
+      Order allow,deny<br />
+      Allow from all<br />
+      Deny from env=interdit<br />
+      &lt;/Location&gt;
+      </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">&nbsp;en&nbsp;</a> |
+<a href="../fr/rewrite/access.html" title="Français">&nbsp;fr&nbsp;</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
diff --git a/docs/manual/rewrite/access.xml.fr b/docs/manual/rewrite/access.xml.fr
new file mode 100644 (file)
index 0000000..76ada87
--- /dev/null
@@ -0,0 +1,322 @@
+<?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&ocirc;le d'acc&egrave;s</title>
+
+<summary>
+
+<p>Ce document est un compl&eacute;ment &agrave; la <a
+href="../mod/mod_rewrite.html">documentation de r&eacute;f&eacute;rence</a> de
+<module>mod_rewrite</module>. Il explique comment utiliser
+<module>mod_rewrite</module> pour contr&ocirc;ler l'acc&egrave;s &agrave; diverses
+ressources, ainsi que d'autres techniques en rapport. Il contient de
+nombreux exemples d'utilisation courante de mod_rewrite avec une
+description d&eacute;taill&eacute;e de leur fonctionnement.</p>
+
+<note type="warning">Vous devez vous attacher &agrave; comprendre le
+fonctionnement des exemples, car la plupart d'entre eux ne
+fonctionneront pas sur votre syst&egrave;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 &agrave; mod_rewrite</a></seealso>
+<seealso><a href="remapping.html">Redirection et remise en
+correspondance</a></seealso>
+<!-- <seealso><a href="access.html">Contr&ocirc;ler l'acc&egrave;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&eacute;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&eacute;f&eacute;rencement &agrave; chaud (Hotlinking) d'images</title>
+
+      <dl>
+        <dt>Description :</dt>
+
+        <dd>
+          <p>Cette technique vous permet d'interdire &agrave; d'autres sites
+         d'inclure directement vos images dans leurs pages. On fait
+         souvent r&eacute;f&eacute;rence &agrave; cette pratique sous le nom de
+         r&eacute;f&eacute;rencement &agrave; chaud (Hotlinking) qui entra&icirc;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&ecirc;te &eacute;chouera, en ce sens que
+       l'image ne sera pas affich&eacute;e depuis le site tiers.</p>
+       <p>Il y a plusieurs mani&egrave;res de g&eacute;rer cette situation.</p>
+
+       <p>Dans le premier exemple, nous rejetons tout simplement la
+       requ&ecirc;te si elle ne provenait pas d'une page appartenant &agrave; 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&ocirc;t que de rejeter la requ&ecirc;te,
+       nous affichons une autre image &agrave; 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&egrave;me exemple, nous redirigeons la requ&ecirc;te vers
+       une image appartenant &agrave; 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&ecirc;tent de
+       r&eacute;f&eacute;rencer vos images &agrave; chaud, car il ne verront pas les images
+       qu'ils s'attendent &agrave; voir.</p>
+
+        </dd>
+
+        <dt>Discussion :</dt>
+
+        <dd>
+        <p>Si vous ne voulez pas rediriger la requ&ecirc;te, mais
+       simplement interdire l'acc&egrave;s &agrave; la ressource, vous pouvez y
+       parvenir sans utiliser mod_rewrite :</p>
+
+        <example>
+        SetEnvIf Referer exemple\.com localreferer<br />
+        &lt;FilesMatch \.(jpg|png|gif)$&gt;<br />
+        Order deny,allow<br />
+        Deny from all<br />
+        Allow from env=localreferer<br />
+        &lt;/FilesMatch&gt;
+        </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&eacute;thode permettant
+       de bloquer les requ&ecirc;tes persistentes en provenance d'un robot
+       particulier, ou d'un navigateur.</p>
+
+        <p>La m&eacute;thode classique pour exclure un robot consiste &agrave; d&eacute;finir
+       un fichier, <code>/robots.txt</code> qui sp&eacute;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&eacute;thodes d'exclusion qui n'utilisent
+       pas mod_rewrite. Notez aussi que toute technique qui repose sur
+       le contenu de la cha&icirc;ne client <code>USER_AGENT</code> peut &ecirc;tre
+       contourn&eacute;e tr&egrave;s facilement car cette cha&icirc;ne de caract&egrave;res peut
+        &ecirc;tre modifi&eacute;e.</p>
+        </dd>
+
+        <dt>Solution :</dt>
+
+        <dd>
+        <p>On utilise un jeu de r&egrave;gles qui sp&eacute;cifie le r&eacute;pertoire &agrave;
+       prot&eacute;ger, ainsi que la cha&icirc;ne client <code>USER_AGENT</code> qui
+       identifie le robot ind&eacute;sirable ou envahissant.</p>
+
+        <p>Dans cet exemple, nous bloquons un robot nomm&eacute;
+       <code>Vilain_Robot</code> pour le r&eacute;pertoire
+       <code>/secret/fichiers</code>. Si vous voulez bloquer ce client
+       seulement depuis une source particuli&egrave;re, vous pouvez aussi
+       sp&eacute;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&ecirc;me r&eacute;sultat sans utiliser
+       mod_rewrite via la m&eacute;thode alternative suivante :
+      </p>
+      <example>
+      SetEnvIfNoCase User-Agent ^Vilain_Robot interdit<br />
+      &lt;Location /secret/fichiers&gt;<br />
+      Order allow,deny<br />
+      Allow from all<br />
+      Deny from env=interdit<br />
+      &lt;/Location&gt;
+      </example>
+      <p>
+      Comme indiqu&eacute; plus haut, il est ais&eacute; de contourner cette
+      technique, simplement en modifiant le contenu de l'en-t&ecirc;te
+      <code>USER_AGENT</code>. Si vous subissez une attaque en r&egrave;gle,
+      vous allez devoir r&eacute;fl&eacute;chir &agrave; un blocage &agrave; un niveau sup&eacute;rieur,
+      par exemple une r&egrave;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&egrave;s &agrave; notre serveur aux clients
+      contenus dans une liste noire similaire &agrave;
+      <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&ecirc;me si elle est trait&eacute;e comme telle. mod_rewrite<br />
+##             l'interpr&egrave;te comme une liste de paires cl&eacute;/valeur, et<br />
+##             chaque entr&eacute;e doit au moins poss&eacute;der une valeur par<br />
+##             d&eacute;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&eacute;suppose que HostNameLookups est
+    d&eacute;fini &agrave; On, de fa&ccedil;on &agrave; ce que les adresses IP des clients puissent
+    &ecirc;tre r&eacute;solues. Dans le cas contraire, vous devez supprimer la
+    seconde condition, ainsi que le drapeau <code>[OR]</code> de la
+    premi&egrave;re.
+    </p>
+    </dd>
+  </dl>
+
+</section>
+
+<section id="referer-deflector">
+
+  <title>Aiguillage bas&eacute; sur l'en-t&ecirc;te Referer</title>
+
+  <dl>
+    <dt>Description :</dt>
+
+    <dd>
+      <p>Redirige les requ&ecirc;tes en fonction du Referer de provenance de
+      la requ&ecirc;te, avec des cibles diff&eacute;rentes pour chaque Referer.</p>
+    </dd>
+
+    <dt>Solution :</dt>
+
+    <dd>
+  <p>Le jeu de r&egrave;gles suivant utilise un fichier de correspondances pour
+  associer chaque Referer &agrave; 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&eacute;es &agrave; chaque Referer, ou, si nous voulons
+      simplement rediriger les requ&ecirc;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>
index aa67bf49f9f68140ccee46d048dafebf5e29459b..cda0183580c79b171a88d0c317a617d973ae87f4 100644 (file)
@@ -8,5 +8,6 @@
 
   <variants>
     <variant>en</variant>
+    <variant>fr</variant>
   </variants>
 </metafile>
index 64d0639fcfea60e4478774ca6b06e0a19fca349c..c82f1dc0966a0bb03ad6ca39622ca2f8b54d185a 100644 (file)
@@ -3,3 +3,7 @@
 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
diff --git a/docs/manual/rewrite/advanced.html.fr b/docs/manual/rewrite/advanced.html.fr
new file mode 100644 (file)
index 0000000..9a7a204
--- /dev/null
@@ -0,0 +1,524 @@
+<?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="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <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">&nbsp;en&nbsp;</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(/&amp;/, $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 "&amp;lt;b&amp;gt;ERREUR&amp;lt;/b&amp;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 "&amp;lt;b&amp;gt;ERREUR&amp;lt;/b&amp;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";
+&amp;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, "&amp;lt;$file");
+$bytes = sysread(FP, $buffer, $size);
+close(FP);
+return $buffer;
+}
+
+$buffer = &amp;readfile($QS_f);
+&amp;print_http_headers_multipart_begin;
+&amp;displayhtml($buffer);
+
+sub mystat {
+local($file) = $_[0];
+local($time);
+
+($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
+return $mtime;
+}
+
+$mtimeL = &amp;mystat($QS_f);
+$mtime = $mtime;
+for ($n = 0; $n &amp;lt; $QS_n; $n++) {
+while (1) {
+    $mtime = &amp;mystat($QS_f);
+    if ($mtime ne $mtimeL) {
+        $mtimeL = $mtime;
+        sleep(2);
+        $buffer = &amp;readfile($QS_f);
+        &amp;print_http_headers_multipart_next;
+        &amp;displayhtml($buffer);
+        sleep(5);
+        $mtimeL = &amp;mystat($QS_f);
+        last;
+    }
+    sleep($QS_s);
+}
+}
+
+&amp;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>&lt;STRING</code>,
+         <code>&gt;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} &gt;0700<br />
+RewriteCond   %{TIME_HOUR}%{TIME_MIN} &lt;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">&nbsp;en&nbsp;</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
diff --git a/docs/manual/rewrite/advanced.xml.fr b/docs/manual/rewrite/advanced.xml.fr
new file mode 100644 (file)
index 0000000..c9edff1
--- /dev/null
@@ -0,0 +1,532 @@
+<?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&eacute;es de r&eacute;&eacute;criture avec mod_rewrite</title>
+
+<summary>
+
+<p>Ce document compl&egrave;te la <a
+    href="../mod/mod_rewrite.html">documentation de r&eacute;f&eacute;rence</a> du
+    module <module>mod_rewrite</module>. Il pr&eacute;sente un certain nombre
+    de techniques avanc&eacute;es quant &agrave;
+    l'utilisation de mod_rewrite.</p>
+
+<note type="warning">Notez que la plupart des exemples ne fonctionneront
+pas en l'&eacute;tat dans la configuration particuli&egrave;re de votre serveur ; il
+est donc important de bien comprendre leur fonctionnement, plut&ocirc;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 &agrave; mod_rewrite</a></seealso>
+<seealso><a href="remapping.html">Redirection et remise en
+correspondance</a></seealso>
+<seealso><a href="access.html">Contr&ocirc;ler l'acc&egrave;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&eacute;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&egrave;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&eacute;thode, un serveur frontal utilise l'URL
+      pour r&eacute;partir de mani&egrave;re appropri&eacute;e les utilisateurs et objets
+      entre diff&eacute;rents serveurs d'arri&egrave;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&eacute;sentent comme suit :</p>
+
+<example>
+utilisateur1  serveur_physique_utilisateur1<br />
+utilisateur2  serveur_physique_utilisateur2<br />
+:      :
+</example>
+
+  <p>Tout ceci est enregistr&eacute; 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&eacute;cessaire que tous les chemins URL soient
+      valides sur tous les serveurs physiques d'arri&egrave;re-plan. Le jeu de
+      r&egrave;gles suivant fait tout ceci pour nous, en s'appuyant sur les
+      fichiers de correspondances, en supposant que serveur0 est un
+      serveur par d&eacute;faut qui sera utilis&eacute; lorsqu'un utilisateur ne
+      poss&egrave;dera pas d'entr&eacute;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&eacute;g&eacute;neration de contenu &agrave; la vol&eacute;e</title>
+
+  <dl>
+    <dt>Description :</dt>
+
+    <dd>
+      <p>Nous voulons g&eacute;n&eacute;rer du contenu de mani&egrave;re dynamique, mais le
+      conserver de mani&egrave;re statique lorsqu'il a &eacute;t&eacute; g&eacute;n&eacute;r&eacute;. La r&egrave;gle
+      suivante v&eacute;rifie l'existence du fichier statique, et le g&eacute;n&egrave;re
+      s'il est absent. Les fichiers statiques peuvent &ecirc;tre supprim&eacute;s
+      p&eacute;riodiquement si on le d&eacute;sire (par exemple via cron), et seront
+      r&eacute;g&eacute;n&eacute;r&eacute;s &agrave; la demande.</p>
+    </dd>
+
+    <dt>Solution :</dt>
+
+    <dd>
+      &Agrave; cet effet, on utilise le jeu de r&egrave;gles suivant :
+
+<example>
+# Cet exemple n'est valable que dans un contexte de r&eacute;pertoire<br />
+RewriteCond %{REQUEST_URI}   <strong>!-U</strong><br />
+RewriteRule ^(.+)\.html$          /regenerate_page.cgi   [PT,L]
+</example>
+
+      <p>L'op&eacute;rateur <code>-U</code> permet de d&eacute;terminer si la cha&icirc;ne
+      de test (dans ce cas <code>REQUEST_URI</code>) est une URL valide.
+      Pour ce faire, il utilise une sous-requ&ecirc;te. Si cette sous-requ&ecirc;te
+      &eacute;choue, ou en d'autres termes, si la ressource demand&eacute;e n'existe pas,
+      cette r&egrave;gle invoque le programme CGI
+      <code>/regenerate_page.cgi</code> qui g&eacute;n&egrave;re la ressource
+      demand&eacute;e et la sauvegarde dans le r&eacute;pertoire des documents, de
+      fa&ccedil;on &agrave; ce qu'une copie statique puisse &ecirc;tre servie lors d'une
+      demande ult&eacute;rieure.</p>
+
+    <p>De cette fa&ccedil;on, les documents qui ne sont pas mis &agrave; jour
+    r&eacute;guli&egrave;rement peuvent &ecirc;tre servis sous une forme statique. Si ces
+    documents doivent &ecirc;tre r&eacute;actualis&eacute;s, on peut les supprimer du
+    r&eacute;pertoire des documents, et ils seront ainsi r&eacute;g&eacute;n&eacute;r&eacute;s &agrave; la
+    prochaine demande.</p>
+    </dd>
+  </dl>
+
+</section>
+
+<section id="load-balancing">
+
+  <title>R&eacute;partition de charge</title>
+
+  <dl>
+    <dt>Description :</dt>
+
+    <dd>
+      <p>Nous voulons r&eacute;partir la charge de mani&egrave;re al&eacute;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&egrave;de un module de r&eacute;partition de charge -
+<module>mod_proxy_balancer</module> - beaucoup plus souple et pr&eacute;sentant
+plus de fonctionnalit&eacute;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&eacute;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
+         &agrave; partir de notre &eacute;diteur ? Impossible ?</p>
+    </dd>
+
+    <dt>Solution :</dt>
+
+    <dd>
+      <p>Non ! Nous allons pour cela combiner la fonctionnalit&eacute; MIME
+         multipart, la fonctionnalit&eacute; NPH du serveur web et la
+         puissance de <module>mod_rewrite</module> pour la manipulation
+         d'URLs. Tout d'abord, nous d&eacute;finissons une nouvelle
+         fonctionnalit&eacute; pour les URLs : l'ajout de
+         <code>:refresh</code> &agrave; toute URL fait que la 'page' est
+         actualis&eacute;e chaque fois que la ressource est mise &agrave; jour dans
+         le syst&egrave;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&icirc;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'&agrave; &eacute;crire le script NPH-CGI. Bien que l'on
+         &eacute;crive habituellement dans ces cas "laiss&eacute; &agrave; la charge du
+         lecteur &agrave; 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;
+
+#   &eacute;clate la variable QUERY_STRING
+@pairs = split(/&amp;/, $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 "&amp;lt;b&amp;gt;ERREUR&amp;lt;/b&amp;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 "&amp;lt;b&amp;gt;ERREUR&amp;lt;/b&amp;gt;: Fichier $QS_f non trouv&eacute;\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";
+&amp;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, "&amp;lt;$file");
+$bytes = sysread(FP, $buffer, $size);
+close(FP);
+return $buffer;
+}
+
+$buffer = &amp;readfile($QS_f);
+&amp;print_http_headers_multipart_begin;
+&amp;displayhtml($buffer);
+
+sub mystat {
+local($file) = $_[0];
+local($time);
+
+($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
+return $mtime;
+}
+
+$mtimeL = &amp;mystat($QS_f);
+$mtime = $mtime;
+for ($n = 0; $n &amp;lt; $QS_n; $n++) {
+while (1) {
+    $mtime = &amp;mystat($QS_f);
+    if ($mtime ne $mtimeL) {
+        $mtimeL = $mtime;
+        sleep(2);
+        $buffer = &amp;readfile($QS_f);
+        &amp;print_http_headers_multipart_next;
+        &amp;displayhtml($buffer);
+        sleep(5);
+        $mtimeL = &amp;mystat($QS_f);
+        last;
+    }
+    sleep($QS_s);
+}
+}
+
+&amp;print_http_headers_multipart_end;
+
+exit(0);
+
+##EOF##
+</pre></example>
+    </dd>
+  </dl>
+
+</section>
+
+<section id="structuredhomedirs">
+
+  <title>R&eacute;pertoires Home structur&eacute;s</title>
+
+  <dl>
+    <dt>Description :</dt>
+
+    <dd>
+      <p>Certains sites avec des milliers d'utilisateurs organisent
+         les r&eacute;pertoires utilisateurs de mani&egrave;re structur&eacute;e, c'est &agrave;
+         dire que chaque r&eacute;pertoire utilisateur se trouve dans un
+         sous-r&eacute;pertoire dont le nom commence (par exemple) par le
+         premier caract&egrave;re du nom de l'utilisateur. Ainsi,
+         <code>/~larry/chemin</code> correspond &agrave;
+         <code>/home/<strong>l</strong>/larry/public_html/chemin</code>, alors
+         que <code>/~waldo/chemin</code> correspond &agrave;
+         <code>/home/<strong>w</strong>/waldo/public_html/chemin</code>.</p>
+    </dd>
+
+    <dt>Solution :</dt>
+
+    <dd>
+      <p>On utilise le jeu de r&egrave;gles suivant pour d&eacute;velopper les
+         URLs avec tilde selon l'organisation structur&eacute;e pr&eacute;c&eacute;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&eacute;faut, la redirection vers un ancrage HTML ne fonctionne
+       pas, car mod_rewrite &eacute;chappe le caract&egrave;re <code>#</code> en le
+       transformant en <code>%23</code>, ce qui rend la redirection
+       inop&eacute;rante.</p>
+    </dd>
+
+    <dt>Solution :</dt>
+
+    <dd>
+      <p>On utilise le drapeau <code>[NE]</code> dans la r&egrave;gle
+         <code>RewriteRule</code>. NE signifie "No Escape".
+      </p>
+    </dd>
+
+    <dt>Discussion :</dt>
+    <dd>Cette technique fonctionne bien entendu pour tout autre
+    caract&egrave;re sp&eacute;cial que mod_rewrite, par d&eacute;faut, code pour insertion
+    dans une URL.</dd>
+  </dl>
+
+</section>
+
+<section id="time-dependent">
+
+  <title>R&eacute;&eacute;criture d&eacute;pendant de l'heure</title>
+
+  <dl>
+    <dt>Description :</dt>
+
+    <dd>
+      <p>Nous voulons servir des contenus diff&eacute;rents selon l'heure du
+      jour en utilisant mod_rewrite.</p>
+    </dd>
+
+    <dt>Solution :</dt>
+
+    <dd>
+      <p>Il existe de nombreuses variables nomm&eacute;es
+         <code>TIME_xxx</code> utilisables dans les conditions de
+         r&eacute;&eacute;criture. Utilis&eacute;es en conjonction avec les mod&egrave;les de
+         comparaison lexicographique sp&eacute;ciaux <code>&lt;STRING</code>,
+         <code>&gt;STRING</code> et <code>=STRING</code>, elles
+         permettent d'effectuer des redirections d&eacute;pendant de
+         l'heure :</p>
+
+<example>
+RewriteEngine on<br />
+RewriteCond   %{TIME_HOUR}%{TIME_MIN} &gt;0700<br />
+RewriteCond   %{TIME_HOUR}%{TIME_MIN} &lt;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&eacute;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&eacute;diaires et les navigateurs peuvent chacun mettre en cache
+       les r&eacute;ponses et ainsi afficher une des deux pages en dehors de
+       la fen&ecirc;tre de temps configur&eacute;e. On peut utiliser
+       <module>mod_expires</module> pour contourner ce probl&egrave;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&eacute;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&eacute;&eacute;criture a eu lieu. Par exemple, vous souhaitez
+      consigner le fait que cette r&eacute;&eacute;criture a eu lieu, et vous servir
+      plus tard de cette information pour d&eacute;terminer si une requ&ecirc;te sera
+      concern&eacute;e par cette r&eacute;&eacute;criture. Pour y parvenir, on peut utiliser
+      une variable d'environnement.</p>
+    </dd>
+
+    <dt>Solution :</dt>
+
+    <dd>
+      <p>Utiliser le drapeau [E] pour d&eacute;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&egrave;gles, vous pouvez v&eacute;rifier le
+    contenu de cette variable d'environnement via une directive
+    RewriteCond :</p>
+
+<example>
+RewriteCond %{ENV:rewritten} =1
+</example>
+
+    </dd>
+  </dl>
+
+</section>
+
+</manualpage>
index dbee8d81a5b7ee31bb92661d8fa8333de4d81453..98192e701877451ef3fad04dc15f3f5fd1e04848 100644 (file)
@@ -8,5 +8,6 @@
 
   <variants>
     <variant>en</variant>
+    <variant>fr</variant>
   </variants>
 </metafile>
index c45209be5b0418324c7ed4934b104ee483192a8c..f61e85a37ebb01f407fe21d394bf4f69885dc86f 100644 (file)
@@ -3,3 +3,7 @@
 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
diff --git a/docs/manual/rewrite/avoid.html.fr b/docs/manual/rewrite/avoid.html.fr
new file mode 100644 (file)
index 0000000..7e18617
--- /dev/null
@@ -0,0 +1,246 @@
+<?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="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <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">&nbsp;en&nbsp;</a> |
+<a href="../fr/rewrite/avoid.html" title="Français">&nbsp;fr&nbsp;</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>
+&lt;VirtualHost *:80&gt;
+ServerName www.example.com<br />
+Redirect / https://www.example.com/<br />
+&lt;/VirtualHost &gt;
+<br />
+&lt;VirtualHost *:443&gt;
+ServerName www.example.com<br />
+<br />
+# ... insérer ici la configuration SSL<br />
+&lt;/VirtualHost &gt;
+</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
+&lt;VirtualHost&gt; 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">&lt;If&gt;</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">&lt;If&gt;</a></code> comme
+suit :</p>
+
+<div class="example"><p><code>
+&lt;If "$req{Host} != 'www.example.com'"&gt;<br />
+RedirectMatch (.*) http://www.example.com$1<br />
+&lt;/If&gt;
+</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 &lt;If&gt;,
+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">&nbsp;en&nbsp;</a> |
+<a href="../fr/rewrite/avoid.html" title="Français">&nbsp;fr&nbsp;</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
diff --git a/docs/manual/rewrite/avoid.xml.fr b/docs/manual/rewrite/avoid.xml.fr
new file mode 100644 (file)
index 0000000..d1c1699
--- /dev/null
@@ -0,0 +1,260 @@
+<?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&eacute;ment &agrave; la <a
+href="../mod/mod_rewrite.html">Documentation de r&eacute;f&eacute;rence</a> de
+<module>mod_rewrite</module>. Il d&eacute;crit peut-&ecirc;tre un des concepts les
+plus importants &agrave; propos de mod_rewrite - &agrave; savoir, quand doit-on &eacute;viter
+de l'utiliser.</p>
+
+<p>mod_rewrite doit &ecirc;tre consid&eacute;r&eacute; comme un dernier recours,
+lorsqu'aucune alternative n'est possible. Utiliser mod_rewrite lorsqu'il
+existe des alternatives plus simples conduit &agrave; des configurations
+confuses, fragiles, et difficiles &agrave; maintenir. La compr&eacute;hension des
+autres alternatives disponibles est une &eacute;tape tr&egrave;s importante sur le
+chemin de la ma&icirc;trise de mod_rewrite.</p>
+
+<p>Vous devez vous attacher &agrave; comprendre le
+fonctionnement des exemples, car la plupart d'entre eux ne
+fonctionneront pas sur votre syst&egrave;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&eacute; est la situation o&ugrave; la seule solution envisageable
+n&eacute;cessite l'acc&egrave;s aux fichiers de configuration du serveur, alors que
+cet acc&egrave;s ne vous est pas accord&eacute;. 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 &agrave; mod_rewrite</a></seealso>
+<seealso><a href="remapping.html">Redirection et remise en
+correspondance</a></seealso>
+<seealso><a href="access.html">Contr&ocirc;le d'acc&egrave;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&eacute;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&ocirc;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&eacute;f&egrave;rera l'utilisation de ces directives. En outre, avec
+<code>RedirectMatch</code>, vous pouvez inclure une expression
+rationnelle dans votre crit&egrave;re de redirection, ce qui vous permet de
+b&eacute;n&eacute;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&eacute;f&eacute;rence au r&eacute;pertoire <code>/un</code> doivent &ecirc;tre
+redirig&eacute;es vers <code>http://un.example.com/</code>, ou toutes les
+requ&ecirc;tes <code>http</code> doivent &ecirc;tre redirig&eacute;es vers
+<code>https</code>.</p>
+
+<p>Pour ce faire, il est pr&eacute;f&eacute;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&eacute;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&eacute;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&eacute;finition :</p>
+
+<example>
+&lt;VirtualHost *:80&gt;
+ServerName www.example.com<br />
+Redirect / https://www.example.com/<br />
+&lt;/VirtualHost &gt;
+<br />
+&lt;VirtualHost *:443&gt;
+ServerName www.example.com<br />
+<br />
+# ... ins&eacute;rer ici la configuration SSL<br />
+&lt;/VirtualHost &gt;
+</example>
+
+<p>L'utilisation de la directive <code>RewriteRule</code> pour accomplir
+cette t&acirc;che peut se justifier s'il existe d'autres directives
+<code>RewriteRule</code> dans la m&ecirc;me port&eacute;e. En effet, lorsque des
+directives <code>Redirect</code> et <code>RewriteRule</code> se trouvent
+dans la m&ecirc;me port&eacute;e, les directives <code>RewriteRule</code> sont
+ex&eacute;cut&eacute;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&egrave;gles <code>RewriteRule</code> se justifie si vous n'avez pas acc&egrave;s
+au fichier de configuration principal, et devez donc accomplir cette
+t&acirc;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&eacute;pertoire, ce dernier &eacute;tant
+en g&eacute;n&eacute;ral situ&eacute; en dehors de l'arborescence d&eacute;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&eacute;f&eacute;rable d'utiliser la directive
+<code>Alias</code> pour des raisons de simplicit&eacute; 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&egrave;s aux fichiers de configuration du
+serveur. En effet, la directive Alias ne peut pas &ecirc;tre utilis&eacute;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&ecirc;me r&eacute;sultat avec les liens
+symboliques, pourvu que <code>Options FollowSymLinks</code> soit activ&eacute;
+sur votre serveur.</p>
+</section>
+
+<section id="vhosts"><title>H&eacute;bergement virtuel</title>
+<p>Bien qu'il soit possible de g&eacute;rer les <a href="vhosts.html">serveurs
+virtuels avec mod_rewrite</a>, il s'agit rarement de la bonne m&eacute;thode.
+Il est pratiquement toujours pr&eacute;f&eacute;rable de cr&eacute;er des blocs
+&lt;VirtualHost&gt; individuels. Dans l'&eacute;ventualit&eacute; o&ugrave; vous devez g&eacute;rer
+un grand nombre de serveurs virtuels, vous devez vous tourner vers
+<module>mod_vhost_alias</module> pour cr&eacute;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&eacute;er un grand nombre de serveurs virtuels dynamiquement.</p>
+
+<p>L'utilisation de <module>mod_rewrite</module> pour la cr&eacute;ation de
+serveurs virtuels peut se r&eacute;v&eacute;ler appropri&eacute;e si votre service
+d'h&eacute;bergement ne vous permet pas d'acc&eacute;der aux fichiers de configuration
+du serveur, et que vous vous trouvez par cons&eacute;quent oblig&eacute; de passer par les
+fichiers <code>.htaccess</code>.</p>
+
+<p>Voir le document <a href="vhosts.html">cr&eacute;ation de serveurs virtuels
+avec mod_rewrite</a> pour plus de d&eacute;tails sur la mani&egrave;re d'y parvenir si
+cela semble &ecirc;tre tout de m&ecirc;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&eacute;&eacute;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&ugrave; aucune correspondance au mod&egrave;le
+n'est vraiment n&eacute;cessaire, comme dans l'exemple ci-dessus, il est
+pr&eacute;f&eacute;rable d'utiliser la directive <directive
+module="mod_proxy">ProxyPass</directive>. L'exemple pr&eacute;c&eacute;dent pourrait
+&ecirc;tre remplac&eacute; 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&egrave;re-plan :</p>
+
+<example>
+ProxyPassReverse /images/ http://serveur-images.local/images/
+</example>
+
+<p>Vous devrez cependant tout de m&ecirc;me utiliser <code>RewriteRule</code>
+lorsque d'autres <code>RewriteRule</code>s se trouvent dans la m&ecirc;me port&eacute;e,
+car elles agissent en g&eacute;n&eacute;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&eacute; pour effectuer une
+action en fonction de la pr&eacute;sence ou de l'absence d'une variable
+d'environnement particuli&egrave;re ou d'un en-t&ecirc;te de requ&ecirc;te, ce qui peut
+&ecirc;tre accompli de mani&egrave;re plus efficace via la directive <directive
+module="core" type="section">If</directive>.</p>
+
+<p>Consid&eacute;rons par exemple le sc&eacute;nario courant o&ugrave; la directive
+<directive>RewriteRule</directive> est utilis&eacute;e pour forcer un nom
+d'h&ocirc;te canonique, tel que <code>www.example.com</code> au lieu de
+<code>example.com</code>. Il est possible d'utiliser &agrave; la place la
+directive <directive module="core" type="section">If</directive> comme
+suit :</p>
+
+<example>
+&lt;If "$req{Host} != 'www.example.com'"&gt;<br />
+RedirectMatch (.*) http://www.example.com$1<br />
+&lt;/If&gt;
+</example>
+
+<p>On peut utiliser cette technique dans de nombreux sc&eacute;narios courants
+en remplacement de <module>mod_rewrite</module> pour effectuer des actions
+en fonction d'en-t&ecirc;tes de requ&ecirc;tes ou de r&eacute;ponses, ou de variables
+d'environnement.</p>
+
+<p>Voir en particulier la <a href="../expr.html">documentation sur
+l'&eacute;valuation des expressions</a> pour une vue d'ensemble des types
+d'expressions que vous pouvez utiliser dans les sections &lt;If&gt;,
+ainsi que dans certaines directives.</p>
+
+</section>
+
+</manualpage>
+
index c734d099c016e5557d2cd14e24efd0fb12361998..9d51904e7ba4e9ebe97a0d41df9da5f173c74222 100644 (file)
@@ -8,5 +8,6 @@
 
   <variants>
     <variant>en</variant>
+    <variant>fr</variant>
   </variants>
 </metafile>
index 491a51c7abbcdeecd057c94e7eab5abc224d182d..6f35b58bae75eeaac5a84fa19eb16b4ffe2609e2 100644 (file)
@@ -3,3 +3,7 @@
 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
diff --git a/docs/manual/rewrite/htaccess.html.fr b/docs/manual/rewrite/htaccess.html.fr
new file mode 100644 (file)
index 0000000..d428062
--- /dev/null
@@ -0,0 +1,41 @@
+<?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="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <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">&nbsp;en&nbsp;</a> |
+<a href="../fr/rewrite/htaccess.html" title="Français">&nbsp;fr&nbsp;</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">&nbsp;en&nbsp;</a> |
+<a href="../fr/rewrite/htaccess.html" title="Français">&nbsp;fr&nbsp;</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
diff --git a/docs/manual/rewrite/htaccess.xml.fr b/docs/manual/rewrite/htaccess.xml.fr
new file mode 100644 (file)
index 0000000..c90d966
--- /dev/null
@@ -0,0 +1,50 @@
+<?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&eacute;ment de la <a
+href="../mod/mod_rewrite.html">documentation de r&eacute;f&eacute;rence</a> du module
+<module>mod_rewrite</module>. Il d&eacute;crit les changements apport&eacute;s aux r&egrave;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 &agrave; 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&eacute;es</a></seealso>
+<seealso><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></seealso>
+
+</manualpage>
index dfb5bbd5501d1c332259700f03361c40ea7b033d..00ee9a1c1e2cfbe9a197e729dd6839ae5e1b6eab 100644 (file)
@@ -8,5 +8,6 @@
 
   <variants>
     <variant>en</variant>
+    <variant>fr</variant>
   </variants>
 </metafile>