]> granicus.if.org Git - apache/blob - docs/manual/rewrite/tech.html.fr
s/2011/2012/g
[apache] / docs / manual / rewrite / tech.html.fr
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" />
12 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <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>
15 <p class="apache">Serveur Apache HTTP Version 2.5</p>
16 <img alt="" src="../images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
18 <div id="path">
19 <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.5</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>
20 <div class="toplang">
21 <p><span>Langues Disponibles: </span><a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="../fr/rewrite/tech.html" title="Français">&nbsp;fr&nbsp;</a></p>
23 </div>
24
25 <p>Ce document passe en revue certains détails techniques à propos du
26 module mod_rewrite et de la mise en correspondance des URLs</p>
27 </div>
28 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#InternalAPI">Phases de l'API</a></li>
29 <li><img alt="" src="../images/down.gif" /> <a href="#InternalRuleset">Traitement du jeu de règles</a></li>
30 </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
31 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">Mise en cache</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>
32 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
33 <div class="section">
34 <h2><a name="InternalAPI" id="InternalAPI">Phases de l'API</a></h2>
35
36       <p>Le traitement des requêtes par le serveur HTTP Apache se
37       déroule en plusieurs phases. Au cours de chaque phase, un ou
38       plusieurs modules peuvent être appelés pour traiter la partie
39       concernée du cycle de vie de la requête. Les différentes phases
40       peuvent consister en traduction d'URL en nom de fichier,
41       authentification, autorisation, gestion de contenu ou journalisation (la
42       liste n'est pas exhaustive).</p>
43
44     <p>mod_rewrite agit dans deux de ces phases (ou accroches - hooks -
45     comme on les nomme souvent) pour la réécriture des URLs.</p>
46
47     <p>Tout d'abord, il utilise le hook traduction URL vers nom de
48     fichier qui intervient après la lecture de la requête HTTP, mais
49     avant le processus d'autorisation. Ensuite, il utilise le hook
50     Fixup, qui intervient après les phases d'autorisation, après la
51     lecture des fichiers de configuration de niveau répertoire (fichiers
52     <code>.htaccess</code>), mais avant l'appel du gestionnaire de
53     contenu.</p>
54
55     <p>Ainsi, lorsqu'une requête arrive et une fois le serveur
56     correspondant ou le serveur virtuel déterminé, le moteur de
57     réécriture commence à traiter toute directive apparaissant dans la
58     configuration de niveau serveur (autrement dit dans le
59     fichier de configuration principal du serveur et les sections
60     <code class="directive"><a href="../mod/core.html#virtualhost">&lt;Virtualhost&gt;</a></code>).
61     Tout ce processus s'exécute au cours de la phase de traduction URL
62     vers nom de fichier.</p>
63
64     <p>Quelques étapes plus loin, une fois les répertoires de données
65     finaux trouvés, les directives de configuration de niveau répertoire
66     (fichiers <code>.htaccess</code> et sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>) sont appliquées. Ce processus
67     s'exécute au cours de la phase Fixup.</p>
68
69     <p>Dans tous ces cas, mod_rewrite réécrit le
70     <code>REQUEST_URI</code> soit vers une nouvelle URL, soit vers un
71     nom de fichier.</p>
72
73     <p>Dans un contexte de niveau répertoire (autrement dit dans les
74     fichiers <code>.htaccess</code> et les sections
75     <code>Directory</code>), les règles de réécriture s'appliquent après
76     la traduction de l'URL en nom de fichier. C'est pourquoi le chemin
77     URL auquel mod_rewrite compare initialement les directives
78     <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est le
79     chemin complet vers le nom de fichier traduit amputé de la partie
80     répertoires (y compris le dernier slash).</p>
81
82     <p>Un exemple : si les règles se trouvent dans
83     /var/www/foo/.htaccess et si une requête pour /foo/bar/baz est
84     traité, une expression comme ^bar/baz$ correspondra.</p>
85
86     <p>Si une substitution intervient dans un contexte de répertoire,
87     une nouvelle sous-requête interne est générée avec la nouvelle URL,
88     ce qui relance le traitement des phases de la requête. Si la
89     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
90     devant préfixer cette substitution. Dans un contexte de répertoire,
91     il faut s'assurer de créer des règles qui, dans certains cas,
92     n'effectueront pas de substitution afin d'éviter les bouclages (au
93     cours d'une passe ultérieure du processus de réécriture au niveau
94     répertoire). Voir <a href="http://wiki.apache.org/httpd/RewriteLooping">Bouclage dans le
95     processus de réécriture</a> pour une discussion plus détaillée à
96     propos de ce problème.</p>
97
98     <p>En conséquence de cette manipulation de l'URL , vous devrez
99     pensez à confectionner différemment vos règles de réécriture dans un
100     contexte de niveau répertoire. En particulier, rappelez-vous que le
101     chemin de répertoire sera absent de l'URL que vos règles de
102     réécriture verront. Voici quelques exemples qui permettront de
103     clarifier les choses :</p>
104
105     <table class="bordered">
106
107         <tr>
108             <th>Position de la règle</th>
109             <th>Règle</th>
110         </tr>
111
112         <tr>
113             <td>Section VirtualHost</td>
114             <td>RewriteRule ^/images/(.+)\.jpg /images/$1.gif</td>
115         </tr>
116
117         <tr>
118             <td>Fichier .htaccess à la racine des documents</td>
119             <td>RewriteRule ^images/(.+)\.jpg images/$1.gif</td>
120         </tr>
121
122         <tr>
123             <td>Fichier .htaccess dans le répertoire images</td>
124             <td>RewriteRule ^(.+)\.jpg $1.gif</td>
125         </tr>
126
127     </table>
128
129     <p>Pour une étude plus approfondie de la manière dont mod_rewrite
130     manipule les URLs dans les différents contextes, vous pouvez
131     consulter les <a href="../mod/mod_rewrite.html#logging">entrées du
132     journal</a> générées au cours du processus de réécriture.</p>
133
134 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
135 <div class="section">
136 <h2><a name="InternalRuleset" id="InternalRuleset">Traitement du jeu de règles</a></h2>
137
138       <p>Maintenant, quand mod_rewrite se lance dans ces deux phases de
139       l'API, il lit le jeu de règles configurées depuis la structure
140       contenant sa configuration (qui a été elle-même créée soit au
141       démarrage d'Apache pour le contexte du serveur, soit lors du
142       parcours des répertoires par le noyau d'Apache pour le contexte de
143       répertoire). Puis le moteur de réécriture est démarré avec le jeu
144       de règles contenu (une ou plusieurs règles associées à leurs
145       conditions). En lui-même, le mode opératoire du moteur de
146       réécriture d'URLs est exactement le même dans les deux contextes
147       de configuration. Seul le traitement du résultat final diffère.</p>
148
149       <p>L'ordre dans lequel les règles sont définies est important car
150       le moteur de réécriture les traite selon une chronologie
151       particulière (et pas très évidente). Le principe est le suivant :
152       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
153       à la suite des autres, et lorsqu'une règle s'applique, il parcourt
154       les éventuelles conditions (directives
155       <code>RewriteCond</code>directives) associées.
156       Pour des raisons historiques, les
157       conditions précèdent les règles, si bien que le déroulement du
158       contrôle est un peu compliqué. Voir la figure 1 pour plus de
159       détails.</p>
160 <p class="figure">
161       <img src="../images/rewrite_rule_flow.png" alt="Flux des comparaisons des directives RewriteRule et RewriteCond" /><br />
162       <dfn>Figure 1:</dfn>Déroulement du contrôle à travers le jeu de
163       règles de réécriture
164 </p>
165       <p>L'URL est tout d'abord comparée au
166       <em>Modèle</em> de chaque règle. Lorsqu'une règle ne s'applique
167       pas, mod_rewrite stoppe immédiatement le traitement de cette règle
168       et passe à la règle suivante. Si l'URL correspond au
169       <em>Modèle</em>, mod_rewrite recherche la présence de conditions
170       correspondantes (les directives Rewritecond apparaissant dans la
171       configuration juste
172       avant les règles de réécriture). S'il n'y en a pas, mod_rewrite remplace
173       l'URL par une chaîne élaborée à partir de la chaîne de
174       <em>Substitution</em>, puis passe à la règle suivante. Si des
175       conditions sont présentes, mod_rewrite lance un bouclage
176       secondaire afin de les traiter selon l'ordre dans lequel elles
177       sont définies. La logique de traitement des conditions est
178       différente : on ne compare pas l'URL à un modèle. Une chaîne de
179       test <em>TestString</em> est tout d'abord élaborée en développant
180       des variables, des références arrières, des recherches dans des
181       tables de correspondances, etc..., puis cette chaîne de test est
182       comparée au modèle de condition <em>CondPattern</em>. Si le modèle
183       ne correspond pas, les autres conditions du jeu ne sont pas
184       examinées et la règle correspondante ne s'applique pas. Si le
185       modèle correspond, la condition suivante est examinée et ainsi de
186       suite jusqu'à la dernière condition. Si toutes les conditions sont
187       satisfaites, le traitement de la règle en cours se poursuit avec
188       le remplacement de l'URL par la chaîne de <em>Substitution</em>.</p>
189
190 </div></div>
191 <div class="bottomlang">
192 <p><span>Langues Disponibles: </span><a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
193 <a href="../fr/rewrite/tech.html" title="Français">&nbsp;fr&nbsp;</a></p>
194 </div><div id="footer">
195 <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>
196 <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>
197 </body></html>