<p><span>Langues Disponibles: </span><a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/tech.html" title="Français"> fr </a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
- anglaise pour les changements récents.</div>
<p>Ce document passe en revue certains détails techniques à propos du
module mod_rewrite et de la mise en correspondance des URLs</p>
<p>Dans un contexte de niveau répertoire (autrement dit dans les
fichiers <code>.htaccess</code> et les sections
<code>Directory</code>), les règles de réécriture s'appliquent après
- la traduction de l'URL en nom de fichier. C'est pourquoi mod_rewrite
- retraduit temporairement le nom de fichier en URL en supprimant le
- chemin de répertoire avant d'appliquer les règles (Reportez-vous à
- la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code>
- pour voir comment vous pourrez par la suite personnaliser la manière
- dont tout ceci est traité). Ensuite, une nouvelle sous-requête
- interne est initiée avec la nouvelle URL, ce qui redémarre le
- traitement des phases de l'API.</p>
+ la traduction de l'URL en nom de fichier. C'est pourquoi le chemin
+ URL auquel mod_rewrite compare initialement les directives
+ <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est le
+ chemin complet vers le nom de fichier traduit amputé de la partie
+ répertoires (y compris le dernier slash).</p>
+
+ <p>Un exemple : si les règles se trouvent dans
+ /var/www/foo/.htaccess et si une requête pour /foo/bar/baz est
+ traité, une expression comme ^bar/baz$ correspondra.</p>
+
+ <p>Si une substitution intervient dans un contexte de répertoire,
+ une nouvelle sous-requête interne est générée avec la nouvelle URL,
+ ce qui relance le traitement des phases de la requête. Si la
+ substitution est un chemin relatif, la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code> détermine le chemin URL
+ devant préfixer cette substitution. Dans un contexte de répertoire,
+ il faut s'assurer de créer des règles qui, dans certains cas,
+ n'effectueront pas de substitution afin d'éviter les bouclages (au
+ cours d'une passe ultérieure du processus de réécriture au niveau
+ répertoire). Voir <a href="http://wiki.apache.org/httpd/RewriteLooping">Bouclage dans le
+ processus de réécriture</a> pour une discussion plus détaillée à
+ propos de ce problème.</p>
<p>En conséquence de cette manipulation de l'URL , vous devrez
pensez à confectionner différemment vos règles de réécriture dans un
<dfn>Figure 1:</dfn>Déroulement du contrôle à travers le jeu de
règles de réécriture
</p>
- <p>Comme vous pouvez le voir, l'URL est tout d'abord comparée au
+ <p>L'URL est tout d'abord comparée au
<em>Modèle</em> de chaque règle. Lorsqu'une règle ne s'applique
pas, mod_rewrite stoppe immédiatement le traitement de cette règle
et passe à la règle suivante. Si l'URL correspond au
<em>Modèle</em>, mod_rewrite recherche la présence de conditions
- correspondantes. S'il n'y en a pas, mod_rewrite remplace
- simplement l'URL par une chaîne élaborée à partir de la chaîne de
+ correspondantes (les directives Rewritecond apparaissant dans la
+ configuration juste
+ avant les règles de réécriture). S'il n'y en a pas, mod_rewrite remplace
+ l'URL par une chaîne élaborée à partir de la chaîne de
<em>Substitution</em>, puis passe à la règle suivante. Si des
conditions sont présentes, mod_rewrite lance un bouclage
secondaire afin de les traiter selon l'ordre dans lequel elles