1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>D�tails techniques sur le module Apache mod_rewrite - Serveur Apache HTTP</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
12<script src="/style/scripts/prettify.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body id="manual-page"><div id="page-header">
17<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p>
18<p class="apache">Serveur Apache HTTP Version 2.2</p>
19<img alt="" src="/images/feather.gif" /></div>
20<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
21<div id="path">
22<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.2</a> &gt; <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>D�tails techniques sur le module Apache mod_rewrite</h1>
23<div class="toplang">
24<p><span>Langues Disponibles: </span><a href="/en/rewrite/tech.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/rewrite/tech.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
26</div>
27
28<p>Ce document passe en revue certains d�tails techniques � propos du
29module mod_rewrite et de la mise en correspondance des URLs</p>
30</div>
31<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#Internal">Fonctionnement interne</a></li>
32<li><img alt="" src="/images/down.gif" /> <a href="#InternalAPI">Phases de l'API</a></li>
33<li><img alt="" src="/images/down.gif" /> <a href="#InternalRuleset">Traitement du jeu de r�gles</a></li>
34</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
35correspondance</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">Mise en cache</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="advanced.html">Techniques avanc�es et astuces</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
36<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
37<div class="section">
38<h2><a name="Internal" id="Internal">Fonctionnement interne</a></h2>
39
40      <p>Le fonctionnement interne de ce module est tr�s complexe, mais
41      il est n�cessaire de l'expliquer, m�me � l'utilisateur "standard",
42      afin d'�viter les erreurs courantes et de pouvoir exploiter toutes
43      ses fonctionnalit�s.</p>
44</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
45<div class="section">
46<h2><a name="InternalAPI" id="InternalAPI">Phases de l'API</a></h2>
47
48      <p>Il faut tout d'abord bien comprendre que le traitement d'une
49      requ�te HTTP par Apache s'effectue en plusieurs phases. L'API
50      d'Apache fournit un point d'accroche (hook) pour chacune de ces
51      phases. Mod_rewrite utilise deux de ces hooks : le hook de
52      conversion des URLs en noms de fichiers qui est utilis� quand la
53      requ�te HTTP a �t� lue mais avant le d�marrage de tout processus
54      d'autorisation, et le hook "Fixup" qui est d�clench� apr�s les
55      phases d'autorisation et apr�s la lecture des fichiers de
56      configuration niveau r�pertoire (<code>.htaccess</code>), mais
57      avant que le gestionnaire de contenu soit activ�.</p>
58
59      <p>Donc, lorsqu'une requ�te arrive et quand Apache a d�termin� le
60      serveur correspondant (ou le serveur virtuel), le moteur de
61      r��criture commence le traitement de toutes les directives de
62      mod_rewrite de la configuration du serveur principal dans la phase
63      de conversion URL vers nom de fichier. Une fois ces �tapes
64      franchies, lorsque les repertoires de donn�es finaux ont �t�
65      trouv�s, les directives de configuration de mod_rewrite au niveau
66      r�pertoire sont �x�cut�es dans la phase Fixup. Dans les deux cas,
67      mod_rewrite r��crit les URLs soit en nouvelles URLs, soit en noms
68      de fichiers, bien que la distinction entre les deux ne soit pas
69      �vidente. Cette utilisation de l'API n'�tait pas sens�e s'op�rer
70      de cette mani�re lorsque l'API fut con�ue, mais depuis Apache 1.x,
71      c'est le seul mode op�ratoire possible pour mod_rewrite. Afin de
72      rendre les choses plus claires, souvenez-vous de ces deux points :</p>
73
74      <ol>
75        <li>Bien que mod_rewrite r��crive les URLs en URLs, les URLs en
76	noms de fichiers et m�me des noms de fichiers en d'autres noms
77	de fichiers, l'API ne propose actuellement qu'un hook URL vers
78	nom de fichier. Les deux hooks manquants seront ajout�s dans
79	Apache � partir de la version 2.0 afin de rendre le processus
80	plus clair. Mais ce point ne pr�sente pas d'inconv�nient pour
81	l'utilisateur, il s'agit simplement d'un fait que vous devez
82	garder � l'esprit : Apache en fait plus avec le hook URL vers
83	nom de fichier que l'API n'a la pr�tention d'en faire.</li>
84
85        <li>
86          Paradoxalement, mod_rewrite permet la manipulation d'URLs dans
87	  un contexte de r�pertoire, <em>c'est � dire</em> dans les
88	  fichiers <code>.htaccess</code>, bien que ces derniers
89	  soient trait�s bien longtemps apr�s que les URLs n'aient �t�
90	  traduites en noms de fichiers. Les choses doivent se d�rouler
91	  ainsi car les fichiers <code>.htaccess</code> r�sident dans le
92	  syst�me de fichiers, et le traitement a d�j� atteint
93	  cette �tape. Autrement dit, en accord avec les phases de
94	  l'API, � ce point du traitement, il est trop tard pour
95	  effectuer des manipulations d'URLs. Pour r�soudre ce probl�me
96	  d'ant�riorit�, mod_rewrite utilise une astuce : pour effectuer
97	  une manipulation URL/nom de fichier dans un contexte de
98	  r�pertoire, mod_rewrite r��crit tout d'abord le nom de fichier
99	  en son URL d'origine (ce qui est normalement impossible, mais
100	  voir ci-dessous l'astuce utilis�e par la directive
101	  <code>RewriteBase</code> pour y parvenir), puis
102	  initialise une nouvelle sous-requ�te interne avec la nouvelle
103	  URL ; ce qui a pour effet de red�marrer le processus des
104	  phases de l'API.
105
106          <p>Encore une fois, mod_rewrite fait tout ce qui est en son
107	  pouvoir pour rendre la complexit� de cette �tape compl�tement
108	  transparente � l'utilisateur, mais vous devez garder ceci �
109	  l'esprit : alors que les manipulations d'URLs dans le contexte
110	  du serveur sont vraiment rapides et efficaces, les r��critures
111	  dans un contexte de r�pertoire sont lentes et inefficaces �
112	  cause du probl�me d'ant�riorit� pr�cit�. Cependant, c'est la
113	  seule mani�re dont mod_rewrite peut proposer des manipulations
114	  d'URLs (limit�es � une branche du syst�me de fichiers) �
115	  l'utilisateur standard.</p>
116        </li>
117      </ol>
118
119      <p>Ne perdez pas de vue ces deux points!</p>
120</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
121<div class="section">
122<h2><a name="InternalRuleset" id="InternalRuleset">Traitement du jeu de r�gles</a></h2>
123
124      <p>Maintenant, quand mod_rewrite se lance dans ces deux phases de
125      l'API, il lit le jeu de r�gles configur�es depuis la structure
126      contenant sa configuration (qui a �t� elle-m�me cr��e soit au
127      d�marrage d'Apache pour le contexte du serveur, soit lors du
128      parcours des r�pertoires par le noyau d'Apache pour le contexte de
129      r�pertoire). Puis le moteur de r��criture est d�marr� avec le jeu
130      de r�gles contenu (une ou plusieurs r�gles associ�es � leurs
131      conditions). En lui-m�me, le mode op�ratoire du moteur de
132      r��criture d'URLs est exactement le m�me dans les deux contextes
133      de configuration. Seul le traitement du r�sultat final diff�re.</p>
134
135      <p>L'ordre dans lequel les r�gles sont d�finies est important car
136      le moteur de r��criture les traite selon une chronologie
137      particuli�re (et pas tr�s �vidente). Le principe est le suivant :
138      le moteur de r��criture traite les r�gles (les directives <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>) les unes
139      � la suite des autres, et lorsqu'une r�gle s'applique, il parcourt
140      les �ventuelles conditions (directives
141      <code>RewriteCond</code>directives) associ�es.
142      Pour des raisons historiques, les
143      conditions pr�c�dent les r�gles, si bien que le d�roulement du
144      contr�le est un peu compliqu�. Voir la figure 1 pour plus de
145      d�tails.</p>
146<p class="figure">
147      <img src="/images/rewrite_rule_flow.png" alt="Flux des comparaisons des directives RewriteRule et RewriteCond" /><br />
148      <dfn>Figure 1:</dfn>D�roulement du contr�le � travers le jeu de
149      r�gles de r��criture
150</p>
151      <p>Comme vous pouvez le voir, l'URL est tout d'abord compar�e au
152      <em>Mod�le</em> de chaque r�gle. Lorsqu'une r�gle ne s'applique
153      pas, mod_rewrite stoppe imm�diatement le traitement de cette r�gle
154      et passe � la r�gle suivante. Si l'URL correspond au
155      <em>Mod�le</em>, mod_rewrite recherche la pr�sence de conditions
156      correspondantes. S'il n'y en a pas, mod_rewrite remplace
157      simplement l'URL par une cha�ne �labor�e � partir de la cha�ne de
158      <em>Substitution</em>, puis passe � la r�gle suivante. Si des
159      conditions sont pr�sentes, mod_rewrite lance un bouclage
160      secondaire afin de les traiter selon l'ordre dans lequel elles
161      sont d�finies. La logique de traitement des conditions est
162      diff�rente : on ne compare pas l'URL � un mod�le. Une cha�ne de
163      test <em>TestString</em> est tout d'abord �labor�e en d�veloppant
164      des variables, des r�f�rences arri�res, des recherches dans des
165      tables de correspondances, etc..., puis cette cha�ne de test est
166      compar�e au mod�le de condition <em>CondPattern</em>. Si le mod�le
167      ne correspond pas, les autres conditions du jeu ne sont pas
168      examin�es et la r�gle correspondante ne s'applique pas. Si le
169      mod�le correspond, la condition suivante est examin�e et ainsi de
170      suite jusqu'� la derni�re condition. Si toutes les conditions sont
171      satisfaites, le traitement de la r�gle en cours se poursuit avec
172      le remplacement de l'URL par la cha�ne de <em>Substitution</em>.</p>
173
174</div></div>
175<div class="bottomlang">
176<p><span>Langues Disponibles: </span><a href="/en/rewrite/tech.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
177<a href="/fr/rewrite/tech.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
178</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
179<script type="text/javascript"><!--//--><![CDATA[//><!--
180var comments_shortname = 'httpd';
181var comments_identifier = 'http://httpd.apache.org/docs/2.2/rewrite/tech.html';
182(function(w, d) {
183    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
184        d.write('<div id="comments_thread"><\/div>');
185        var s = d.createElement('script');
186        s.type = 'text/javascript';
187        s.async = true;
188        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
189        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
190    }
191    else { 
192        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
193    }
194})(window, document);
195//--><!]]></script></div><div id="footer">
196<p class="apache">Copyright 2013 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
197<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossaire</a> | <a href="/sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
198if (typeof(prettyPrint) !== 'undefined') {
199    prettyPrint();
200}
201//--><!]]></script>
202</body></html>