File: tech.html.fr

package info (click to toggle)
apache2 2.4.10-10%2Bdeb8u12
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 53,768 kB
  • sloc: ansic: 156,128; sh: 12,961; perl: 1,760; awk: 738; makefile: 577; lex: 374; yacc: 161
file content (221 lines) | stat: -rw-r--r-- 14,126 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
<?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>Dtails techniques sur le module Apache mod_rewrite - Serveur Apache HTTP Version 2.4</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 rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<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="http://wiki.apache.org/httpd/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>Dtails techniques sur le module Apache mod_rewrite</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/rewrite/tech.html" title="Franais">&nbsp;fr&nbsp;</a></p>
</div>

<p>Ce document passe en revue certains dtails techniques  propos du
module mod_rewrite et de la mise en correspondance des URLs</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#InternalAPI">Phases de l'API</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#InternalRuleset">Traitement du jeu de rgles</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">Contrle d'accs</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 avances</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>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="InternalAPI" id="InternalAPI">Phases de l'API</a></h2>

      <p>Le traitement des requtes par le serveur HTTP Apache se
      droule en plusieurs phases. Au cours de chaque phase, un ou
      plusieurs modules peuvent tre appels pour traiter la partie
      concerne du cycle de vie de la requte. Les diffrentes phases
      peuvent consister en traduction d'URL en nom de fichier,
      authentification, autorisation, gestion de contenu ou journalisation (la
      liste n'est pas exhaustive).</p>

    <p>mod_rewrite agit dans deux de ces phases (ou accroches - hooks -
    comme on les nomme souvent) pour la rcriture des URLs.</p>

    <p>Tout d'abord, il utilise le hook traduction URL vers nom de
    fichier qui intervient aprs la lecture de la requte HTTP, mais
    avant le processus d'autorisation. Ensuite, il utilise le hook
    Fixup, qui intervient aprs les phases d'autorisation, aprs la
    lecture des fichiers de configuration de niveau rpertoire (fichiers
    <code>.htaccess</code>), mais avant l'appel du gestionnaire de
    contenu.</p>

    <p>Ainsi, lorsqu'une requte arrive et une fois le serveur
    correspondant ou le serveur virtuel dtermin, le moteur de
    rcriture commence  traiter toute directive apparaissant dans la
    configuration de niveau serveur (autrement dit dans le
    fichier de configuration principal du serveur et les sections
    <code class="directive"><a href="../mod/core.html#virtualhost">&lt;Virtualhost&gt;</a></code>).
    Tout ce processus s'excute au cours de la phase de traduction URL
    vers nom de fichier.</p>

    <p>Quelques tapes plus loin, une fois les rpertoires de donnes
    finaux trouvs, les directives de configuration de niveau rpertoire
    (fichiers <code>.htaccess</code> et sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>) sont appliques. Ce processus
    s'excute au cours de la phase Fixup.</p>

    <p>Dans tous ces cas, mod_rewrite rcrit le
    <code>REQUEST_URI</code> soit vers une nouvelle URL, soit vers un
    nom de fichier.</p>

    <p>Dans un contexte de niveau rpertoire (autrement dit dans les
    fichiers <code>.htaccess</code> et les sections
    <code>Directory</code>), les rgles de rcriture s'appliquent aprs
    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
    rpertoires (y compris le dernier slash).</p>

    <p>Un exemple : si les rgles se trouvent dans
    /var/www/foo/.htaccess et si une requte pour /foo/bar/baz est
    trait, une expression comme ^bar/baz$ correspondra.</p>

    <p>Si une substitution intervient dans un contexte de rpertoire,
    une nouvelle sous-requte interne est gnre avec la nouvelle URL,
    ce qui relance le traitement des phases de la requte. Si la
    substitution est un chemin relatif, la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritebase">RewriteBase</a></code> dtermine le chemin URL
    devant prfixer cette substitution. Dans un contexte de rpertoire,
    il faut s'assurer de crer des rgles qui
    n'effectueront pas de substitution au
    cours d'une passe ultrieure du processus de rcriture au niveau
    rpertoire afin d'viter les bouclages . Voir <a href="http://wiki.apache.org/httpd/RewriteLooping">Bouclage dans le
    processus de rcriture</a> pour une discussion plus dtaille 
    propos de ce problme.</p>

    <p>En consquence de cette manipulation de l'URL , vous devrez
    pensez  confectionner diffremment vos rgles de rcriture dans un
    contexte de niveau rpertoire. En particulier, rappelez-vous que le
    chemin de rpertoire sera absent de l'URL que vos rgles de
    rcriture verront. Voici quelques exemples qui permettront de
    clarifier les choses :</p>

    <table class="bordered">

        <tr>
            <th>Position de la rgle</th>
            <th>Rgle</th>
        </tr>

        <tr>
            <td>Section VirtualHost</td>
            <td>RewriteRule ^/images/(.+)\.jpg /images/$1.gif</td>
        </tr>

        <tr>
            <td>Fichier .htaccess  la racine des documents</td>
            <td>RewriteRule ^images/(.+)\.jpg images/$1.gif</td>
        </tr>

        <tr>
            <td>Fichier .htaccess dans le rpertoire images</td>
            <td>RewriteRule ^(.+)\.jpg $1.gif</td>
        </tr>

    </table>

    <p>Pour une tude plus approfondie de la manire dont mod_rewrite
    manipule les URLs dans les diffrents contextes, vous pouvez
    consulter les <a href="../mod/mod_rewrite.html#logging">entres du
    journal</a> gnres au cours du processus de rcriture.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="InternalRuleset" id="InternalRuleset">Traitement du jeu de rgles</a></h2>

      <p>Maintenant, quand mod_rewrite se lance dans ces deux phases de
      l'API, il lit le jeu de rgles configures depuis la structure
      contenant sa configuration (qui a t elle-mme cre soit au
      dmarrage d'Apache pour le contexte du serveur, soit lors du
      parcours des rpertoires par le noyau d'Apache pour le contexte de
      rpertoire). Puis le moteur de rcriture est dmarr avec le jeu
      de rgles contenu (une ou plusieurs rgles associes  leurs
      conditions). En lui-mme, le mode opratoire du moteur de
      rcriture d'URLs est exactement le mme dans les deux contextes
      de configuration. Seul le traitement du rsultat final diffre.</p>

      <p>L'ordre dans lequel les rgles sont dfinies est important car
      le moteur de rcriture les traite selon une chronologie
      particulire (et pas trs vidente). Le principe est le suivant :
      le moteur de rcriture traite les rgles (les directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>) les unes
       la suite des autres, et lorsqu'une rgle s'applique, il parcourt
      les ventuelles conditions (directives
      <code>RewriteCond</code>directives) associes.
      Pour des raisons historiques, les
      conditions prcdent les rgles, si bien que le droulement du
      contrle est un peu compliqu. Voir la figure 1 pour plus de
      dtails.</p>
<p class="figure">
      <img src="../images/rewrite_process_uri.png" alt="Flux des comparaisons des directives RewriteRule et RewriteCond" /><br />
      <dfn>Figure 1:</dfn>Droulement du contrle  travers le jeu de
      rgles de rcriture
</p>
      <p>L'URL est tout d'abord compare au
      <em>Modle</em> de chaque rgle. Lorsqu'une rgle ne s'applique
      pas, mod_rewrite stoppe immdiatement le traitement de cette rgle
      et passe  la rgle suivante. Si l'URL correspond au
      <em>Modle</em>, mod_rewrite recherche la prsence de conditions
      correspondantes (les directives Rewritecond apparaissant dans la
      configuration juste
      avant les rgles de rcriture). S'il n'y en a pas, mod_rewrite remplace
      l'URL par une chane labore  partir de la chane de
      <em>Substitution</em>, puis passe  la rgle suivante. Si des
      conditions sont prsentes, mod_rewrite lance un bouclage
      secondaire afin de les traiter selon l'ordre dans lequel elles
      sont dfinies. La logique de traitement des conditions est
      diffrente : on ne compare pas l'URL  un modle. Une chane de
      test <em>TestString</em> est tout d'abord labore en dveloppant
      des variables, des rfrences arrires, des recherches dans des
      tables de correspondances, etc..., puis cette chane de test est
      compare au modle de condition <em>CondPattern</em>. Si le modle
      ne correspond pas, les autres conditions du jeu ne sont pas
      examines et la rgle correspondante ne s'applique pas. Si le
      modle correspond, la condition suivante est examine et ainsi de
      suite jusqu' la dernire condition. Si toutes les conditions sont
      satisfaites, le traitement de la rgle en cours se poursuit avec
      le remplacement de l'URL par la chane de <em>Substitution</em>.</p>

</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/rewrite/tech.html" title="Franais">&nbsp;fr&nbsp;</a></p>
</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>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/rewrite/tech.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else { 
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2014 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="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[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>