]> granicus.if.org Git - apache/blob - docs/manual/rewrite/tech.xml.fr
Rebuild.
[apache] / docs / manual / rewrite / tech.xml.fr
1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision: 1673945 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <manualpage metafile="tech.xml.meta">
26 <parentdocument href="./">Rewrite</parentdocument>
27
28   <title>D&eacute;tails techniques sur le module Apache mod_rewrite</title>
29
30 <summary>
31 <p>Ce document passe en revue certains d&eacute;tails techniques &agrave; propos du
32 module mod_rewrite et de la mise en correspondance des URLs</p>
33 </summary>
34 <seealso><a href="../mod/mod_rewrite.html">Documentation du module mod_rewrite</a></seealso>
35 <seealso><a href="intro.html">Introduction &agrave; mod_rewrite</a></seealso>
36 <seealso><a href="remapping.html">Redirection et remise en
37 correspondance</a></seealso>
38 <seealso><a href="access.html">Contr&ocirc;le d'acc&egrave;s</a></seealso>
39 <seealso><a href="vhosts.html">Serveurs virtuels</a></seealso>
40 <seealso><a href="proxy.html">Mise en cache</a></seealso>
41 <seealso><a href="rewritemap.html">Utilisation de RewriteMap</a></seealso>
42 <seealso><a href="advanced.html">Techniques avanc&eacute;es</a></seealso>
43 <seealso><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></seealso>
44
45 <section id="InternalAPI"><title>Phases de l'API</title>
46
47       <p>Le traitement des requ&ecirc;tes par le serveur HTTP Apache se
48       d&eacute;roule en plusieurs phases. Au cours de chaque phase, un ou
49       plusieurs modules peuvent &ecirc;tre appel&eacute;s pour traiter la partie
50       concern&eacute;e du cycle de vie de la requ&ecirc;te. Les diff&eacute;rentes phases
51       peuvent consister en traduction d'URL en nom de fichier,
52       authentification, autorisation, gestion de contenu ou journalisation (la
53       liste n'est pas exhaustive).</p>
54
55     <p>mod_rewrite agit dans deux de ces phases (ou accroches - hooks -
56     comme on les nomme souvent) pour la r&eacute;&eacute;criture des URLs.</p>
57
58     <p>Tout d'abord, il utilise le hook traduction URL vers nom de
59     fichier qui intervient apr&egrave;s la lecture de la requ&ecirc;te HTTP, mais
60     avant le processus d'autorisation. Ensuite, il utilise le hook
61     Fixup, qui intervient apr&egrave;s les phases d'autorisation, apr&egrave;s la
62     lecture des fichiers de configuration de niveau r&eacute;pertoire (fichiers
63     <code>.htaccess</code>), mais avant l'appel du gestionnaire de
64     contenu.</p>
65
66     <p>Lorsqu'une requ&ecirc;te arrive et une fois le serveur
67     correspondant ou le serveur virtuel d&eacute;termin&eacute;, le moteur de
68     r&eacute;&eacute;criture commence &agrave; traiter toute directive apparaissant dans la
69     configuration de niveau serveur (autrement dit dans le
70     fichier de configuration principal du serveur et les sections
71     <directive module="core" type="section">Virtualhost</directive>).
72     Tout ce processus s'ex&eacute;cute au cours de la phase de traduction URL
73     vers nom de fichier.</p>
74
75     <p>Quelques &eacute;tapes plus loin, une fois les r&eacute;pertoires de donn&eacute;es
76     finaux trouv&eacute;s, les directives de configuration de niveau r&eacute;pertoire
77     (fichiers <code>.htaccess</code> et sections <directive module="core"
78     type="section">Directory</directive>) sont appliqu&eacute;es. Ce processus
79     s'ex&eacute;cute au cours de la phase Fixup.</p>
80
81     <p>Dans tous ces cas, mod_rewrite r&eacute;&eacute;crit le
82     <code>REQUEST_URI</code> soit vers une nouvelle URL, soit vers un
83     nom de fichier.</p>
84
85     <p>Dans un contexte de niveau r&eacute;pertoire (autrement dit dans les
86     fichiers <code>.htaccess</code> et les sections
87     <code>Directory</code>), les r&egrave;gles de r&eacute;&eacute;criture s'appliquent apr&egrave;s
88     la traduction de l'URL en nom de fichier. C'est pourquoi le chemin
89     URL auquel mod_rewrite compare initialement les directives
90     <directive  module="mod_rewrite">RewriteRule</directive> est le
91     chemin complet vers le nom de fichier traduit amput&eacute; de la partie
92     r&eacute;pertoires (y compris le dernier slash).</p>
93
94     <p>Un exemple : si les r&egrave;gles se trouvent dans
95     /var/www/foo/.htaccess et si une requ&ecirc;te pour /foo/bar/baz est
96     trait&eacute;, une expression comme ^bar/baz$ correspondra.</p>
97
98     <p>Si une substitution intervient dans un contexte de r&eacute;pertoire,
99     une nouvelle sous-requ&ecirc;te interne est g&eacute;n&eacute;r&eacute;e avec la nouvelle URL,
100     ce qui relance le traitement des phases de la requ&ecirc;te. Si la
101     substitution est un chemin relatif, la directive <directive
102     module="mod_rewrite">RewriteBase</directive> d&eacute;termine le chemin URL
103     devant pr&eacute;fixer cette substitution. Dans un contexte de r&eacute;pertoire,
104     il faut s'assurer de cr&eacute;er des r&egrave;gles qui
105     n'effectueront pas de substitution au
106     cours d'une passe ult&eacute;rieure du processus de r&eacute;&eacute;criture au niveau
107     r&eacute;pertoire afin d'&eacute;viter les bouclages . Voir <a
108     href="http://wiki.apache.org/httpd/RewriteLooping">Bouclage dans le
109     processus de r&eacute;&eacute;criture</a> pour une discussion plus d&eacute;taill&eacute;e &agrave;
110     propos de ce probl&egrave;me.</p>
111
112     <p>En cons&eacute;quence de cette manipulation de l'URL , vous devrez
113     pensez &agrave; confectionner diff&eacute;remment vos r&egrave;gles de r&eacute;&eacute;criture dans un
114     contexte de niveau r&eacute;pertoire. En particulier, rappelez-vous que le
115     chemin de r&eacute;pertoire sera absent de l'URL que vos r&egrave;gles de
116     r&eacute;&eacute;criture verront. Voici quelques exemples qui permettront de
117     clarifier les choses :</p>
118
119     <table border="1">
120
121         <tr>
122             <th>Position de la r&egrave;gle</th>
123             <th>R&egrave;gle</th>
124         </tr>
125
126         <tr>
127             <td>Section VirtualHost</td>
128             <td>RewriteRule "^/images/(.+)\.jpg" "/images/$1.gif"</td>
129         </tr>
130
131         <tr>
132             <td>Fichier .htaccess &agrave; la racine des documents</td>
133             <td>RewriteRule "^images/(.+)\.jpg" "images/$1.gif"</td>
134         </tr>
135
136         <tr>
137             <td>Fichier .htaccess dans le r&eacute;pertoire images</td>
138             <td>RewriteRule "^(.+)\.jpg" "$1.gif"</td>
139         </tr>
140
141     </table>
142
143     <p>Pour une &eacute;tude plus approfondie de la mani&egrave;re dont mod_rewrite
144     manipule les URLs dans les diff&eacute;rents contextes, vous pouvez
145     consulter les <a href="../mod/mod_rewrite.html#logging">entr&eacute;es du
146     journal</a> g&eacute;n&eacute;r&eacute;es au cours du processus de r&eacute;&eacute;criture.</p>
147
148 </section>
149
150 <section id="InternalRuleset"><title>Traitement du jeu de r&egrave;gles</title>
151
152       <p>Maintenant, quand mod_rewrite se lance dans ces deux phases de
153       l'API, il lit le jeu de r&egrave;gles configur&eacute;es depuis la structure
154       contenant sa configuration (qui a &eacute;t&eacute; elle-m&ecirc;me cr&eacute;&eacute;e soit au
155       d&eacute;marrage d'Apache pour le contexte du serveur, soit lors du
156       parcours des r&eacute;pertoires par le noyau d'Apache pour le contexte de
157       r&eacute;pertoire). Puis le moteur de r&eacute;&eacute;criture est d&eacute;marr&eacute; avec le jeu
158       de r&egrave;gles contenu (une ou plusieurs r&egrave;gles associ&eacute;es &agrave; leurs
159       conditions). En lui-m&ecirc;me, le mode op&eacute;ratoire du moteur de
160       r&eacute;&eacute;criture d'URLs est exactement le m&ecirc;me dans les deux contextes
161       de configuration. Seul le traitement du r&eacute;sultat final diff&egrave;re.</p>
162
163       <p>L'ordre dans lequel les r&egrave;gles sont d&eacute;finies est important car
164       le moteur de r&eacute;&eacute;criture les traite selon une chronologie
165       particuli&egrave;re (et pas tr&egrave;s &eacute;vidente). Le principe est le suivant :
166       le moteur de r&eacute;&eacute;criture traite les r&egrave;gles (les directives <directive
167       module="mod_rewrite">RewriteRule</directive>) les unes
168       &agrave; la suite des autres, et lorsqu'une r&egrave;gle s'applique, il parcourt
169       les &eacute;ventuelles conditions (directives
170       <code>RewriteCond</code>directives) associ&eacute;es.
171       Pour des raisons historiques, les
172       conditions pr&eacute;c&egrave;dent les r&egrave;gles, si bien que le d&eacute;roulement du
173       contr&ocirc;le est un peu compliqu&eacute;. Voir la figure 1 pour plus de
174       d&eacute;tails.</p>
175 <p class="figure">
176       <img src="../images/rewrite_process_uri.png"
177           alt="Flux des comparaisons des directives RewriteRule et RewriteCond" /><br />
178       <dfn>Figure 1:</dfn>D&eacute;roulement du contr&ocirc;le &agrave; travers le jeu de
179       r&egrave;gles de r&eacute;&eacute;criture
180 </p>
181       <p>L'URL est tout d'abord compar&eacute;e au
182       <em>Mod&egrave;le</em> de chaque r&egrave;gle. Lorsqu'une r&egrave;gle ne s'applique
183       pas, mod_rewrite stoppe imm&eacute;diatement le traitement de cette r&egrave;gle
184       et passe &agrave; la r&egrave;gle suivante. Si l'URL correspond au
185       <em>Mod&egrave;le</em>, mod_rewrite recherche la pr&eacute;sence de conditions
186       correspondantes (les directives Rewritecond apparaissant dans la
187       configuration juste
188       avant les r&egrave;gles de r&eacute;&eacute;criture). S'il n'y en a pas, mod_rewrite remplace
189       l'URL par une cha&icirc;ne &eacute;labor&eacute;e &agrave; partir de la cha&icirc;ne de
190       <em>Substitution</em>, puis passe &agrave; la r&egrave;gle suivante. Si des
191       conditions sont pr&eacute;sentes, mod_rewrite lance un bouclage
192       secondaire afin de les traiter selon l'ordre dans lequel elles
193       sont d&eacute;finies. La logique de traitement des conditions est
194       diff&eacute;rente : on ne compare pas l'URL &agrave; un mod&egrave;le. Une cha&icirc;ne de
195       test <em>TestString</em> est tout d'abord &eacute;labor&eacute;e en d&eacute;veloppant
196       des variables, des r&eacute;f&eacute;rences arri&egrave;res, des recherches dans des
197       tables de correspondances, etc..., puis cette cha&icirc;ne de test est
198       compar&eacute;e au mod&egrave;le de condition <em>CondPattern</em>. Si le mod&egrave;le
199       ne correspond pas, les autres conditions du jeu ne sont pas
200       examin&eacute;es et la r&egrave;gle correspondante ne s'applique pas. Si le
201       mod&egrave;le correspond, la condition suivante est examin&eacute;e et ainsi de
202       suite jusqu'&agrave; la derni&egrave;re condition. Si toutes les conditions sont
203       satisfaites, le traitement de la r&egrave;gle en cours se poursuit avec
204       le remplacement de l'URL par la cha&icirc;ne de <em>Substitution</em>.</p>
205
206 </section>
207
208
209 </manualpage>
210