]> granicus.if.org Git - apache/blob - docs/manual/rewrite/flags.html.fr
0849faa9a6f69e1c1856ba78e47c5d9d0bd7db79
[apache] / docs / manual / rewrite / flags.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>Les drapeaux de réécriture - 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.4</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.4</a> &gt; <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Les drapeaux de réécriture</h1>
23 <div class="toplang">
24 <p><span>Langues Disponibles: </span><a href="../en/rewrite/flags.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25 <a href="../fr/rewrite/flags.html" title="Français">&nbsp;fr&nbsp;</a></p>
26 </div>
27 <div class="outofdate">Cette traduction peut être périmée. Vérifiez la version
28             anglaise pour les changements récents.</div>
29
30 <p>Ce document décrit les drapeaux disponibles dans la directive
31 <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, en fournissant
32 des explications détaillées et des exemples.</p>
33 </div>
34 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li>
35 <li><img alt="" src="../images/down.gif" /> <a href="#flag_b">B (échappement dans les références arrières)</a></li>
36 <li><img alt="" src="../images/down.gif" /> <a href="#flag_c">C|chain</a></li>
37 <li><img alt="" src="../images/down.gif" /> <a href="#flag_co">CO|cookie</a></li>
38 <li><img alt="" src="../images/down.gif" /> <a href="#flag_dpi">DPI|discardpath</a></li>
39 <li><img alt="" src="../images/down.gif" /> <a href="#flag_e">E|env</a></li>
40 <li><img alt="" src="../images/down.gif" /> <a href="#flag_end">END</a></li>
41 <li><img alt="" src="../images/down.gif" /> <a href="#flag_f">F|forbidden</a></li>
42 <li><img alt="" src="../images/down.gif" /> <a href="#flag_g">G|gone</a></li>
43 <li><img alt="" src="../images/down.gif" /> <a href="#flag_h">H|handler</a></li>
44 <li><img alt="" src="../images/down.gif" /> <a href="#flag_l">L|last</a></li>
45 <li><img alt="" src="../images/down.gif" /> <a href="#flag_n">N|next</a></li>
46 <li><img alt="" src="../images/down.gif" /> <a href="#flag_nc">NC|nocase</a></li>
47 <li><img alt="" src="../images/down.gif" /> <a href="#flag_ne">NE|noescape</a></li>
48 <li><img alt="" src="../images/down.gif" /> <a href="#flag_ns">NS|nosubreq</a></li>
49 <li><img alt="" src="../images/down.gif" /> <a href="#flag_p">P|proxy</a></li>
50 <li><img alt="" src="../images/down.gif" /> <a href="#flag_pt">PT|passthrough</a></li>
51 <li><img alt="" src="../images/down.gif" /> <a href="#flag_qsa">QSA|qsappend</a></li>
52 <li><img alt="" src="../images/down.gif" /> <a href="#flag_qsd">QSD|qsdiscard</a></li>
53 <li><img alt="" src="../images/down.gif" /> <a href="#flag_r">R|redirect</a></li>
54 <li><img alt="" src="../images/down.gif" /> <a href="#flag_s">S|skip</a></li>
55 <li><img alt="" src="../images/down.gif" /> <a href="#flag_t">T|type</a></li>
56 </ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Documentation du module</a></li><li><a href="intro.html">Introduction à mod_rewrite</a></li><li><a href="remapping.html">Redirection and remise en
57 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><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
58 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
59 <div class="section">
60 <h2><a name="introduction" id="introduction">Introduction</a></h2>
61 <p>Le comportement d'une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> peut être modifié par un ou
62 plusieurs drapeaux. Les drapeaux sont situés en fin de règle, entourés
63 de crochets, et séparés le cas échéant par des virgules.</p>
64 <pre class="prettyprint lang-config">RewriteRule pattern target [Flag1,Flag2,Flag3]</pre>
65
66
67 <p>Les drapeaux ont tous une forme courte, comme <code>CO</code>, ainsi
68 qu'une forme longue, comme <code>cookie</code>. Certains drapeaux
69 peuvent avoir un ou plusieurs arguments. Les drapeaux sont insensibles à
70 la casse.</p>
71
72 <p>Chaque drapeau (à quelques exceptions près) possède une forme longue et une forme courte. Bien que
73 la forme courte soit la plus couramment utilisée, nous vous recommandons
74 de vous familiariser avec les drapeaux sous leur forme longue, afin de
75 bien mémoriser ce que chaque drapeau est supposé faire.</p>
76
77 <p>Les drapeaux qui modifient les métadonnées associées à la requête
78 (T=, H=, E=) n'ont aucun effet dans un contexte de répertoire ou de
79 fichier htaccess, lorsqu'une substitution (autre que '-') est effectuée
80 au cours de la même passe du processus de réécriture.
81 </p>
82
83 <p>Chaque drapeau disponible est présenté ici, avec un exemple
84 d'utilisation.</p>
85 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
86 <div class="section">
87 <h2><a name="flag_b" id="flag_b">B (échappement dans les références arrières)</a></h2>
88 <p>Avec le drapeau [B], la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> échappe les caractères
89 non-alphanumériques avant d'appliquer la transformation.</p>
90
91 <p><code>mod_rewrite</code> doit supprimer les séquences d'échappement
92 des URLs avant leur
93 mise en correspondance avec le système de fichiers ; les séquences
94 d'échappement sont donc supprimées des références arrières au moment où
95 ces dernières sont appliquées. Avec le drapeau B, les caractères
96 non-alphanumériques des références arrières seront échappés. Considérons
97 par exemple cette règle :</p>
98
99 <pre class="prettyprint lang-config">RewriteRule ^search/(.*)$ /search.php?term=$1</pre>
100
101
102 <p>Soit le terme de recherche 'x &amp; y/z' ; un navigateur va le coder
103 en 'x%20%26%20y%2Fz', transformant la requête en
104 'search/x%20%26%20y%2Fz'. Sans le drapeau B, cette règle de réécriture
105 va réécrire la requête en 'search.php?term=x &amp; y/z', ce qui ne
106 correspond pas à une URL valide et cette dernière sera encodée en
107 <code>search.php?term=x%20&amp;y%2Fz=</code>, ce qui ne correspond pas à
108 ce que l'on souhaitait.</p>
109
110 <p>Avec le drapeau B, les paramètres sont réencodés avant d'être passés
111 à l'URL résultante, ce qui fournit une réécriture correcte en
112 <code>/search.php?term=x%20%26%20y%2Fz</code>.</p>
113
114 <p>Notez que vous devrez peut-être aussi définir la
115 directive <code class="directive"><a href="../mod/core.html#allowencodedslashes">AllowEncodedSlashes</a></code>
116 à <code>On</code> pour
117 que cet exemple particulier fonctionne, car httpd ne permet pas les
118 slashes encodés dans les URLs, et renvoie une erreur 404 s'il en
119 rencontre un.</p>
120
121 <p>Ce processus d'échappement est en particulier nécessaire dans le
122 contexte d'un mandataire, où l'accès au serveur d'arrière-plan échouera
123 si on présente à ce dernier une URL non échappée.</p>
124
125 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
126 <div class="section">
127 <h2><a name="flag_c" id="flag_c">C|chain</a></h2>
128 <p>Le drapeau [C] ou [chain] indique que la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est chaînée avec la
129 suivante. Autrement dit, si la règle s'applique, elle est traitée
130 normalement et passe le contrôle à la règle suivante. Par contre, si
131 elle ne s'applique pas, la règle suivante, ainsi que toutes les règles
132 chaînées qui suivent, seront sautées.</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="flag_co" id="flag_co">CO|cookie</a></h2>
137 <p>Le drapeau [CO], ou [cookie], vous permet de définir un cookie
138 lorsqu'une règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>
139 s'applique. Il possède trois arguments obligatoires et
140 quatre arguments optionnels.</p>
141
142 <p>La syntaxe complète de ce drapeau, avec tous ses attributs, est la
143 suivante :</p>
144
145 <div class="example"><p><code>
146 [CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
147 </code></p></div>
148
149 <p>Vous devez déclarer un nom, une valeur et un domaine pour que
150 le cookie puisse être défini.</p>
151
152
153 <dl>
154 <dt>Domain</dt>
155 <dd>Le domaine pour lequel vous souhaitez que le cookie soit valide. Ce
156 peut être un nom de serveur, comme <code>www.example.com</code>, ou un
157 domaine, comme <code>.example.com</code>. Il doit comporter au moins
158 deux parties séparées par un point. C'est à dire que vous ne pouvez pas
159 utiliser les valeurs <code>.com</code> ou <code>.net</code>. En effet,
160 ce style de cookie est interdit par le modèle de sécurité des cookies.</dd>
161 </dl>
162
163 <p>Vous pouvez aussi définir les valeurs suivantes :</p>
164
165 <dl>
166 <dt>Lifetime</dt>
167 <dd>La durée de vie du cookie, en minutes.</dd>
168 <dd>Une valeur de 0 indique une durée de vie correspondant à la session
169 courante du navigateur. Il s'agit de la valeur par défaut.</dd>
170
171 <dt>Path</dt>
172 <dd>Le chemin, sur le site web concerné, pour lequel le cookie est
173 valide, du style <code>/clients/</code> or
174 <code>/fichiers/telechargement/</code>.</dd>
175 <dd>La valeur par défaut est <code>/</code> - c'est à dire l'ensemble du
176 site web.</dd>
177
178 <dt>Secure</dt>
179 <dd>Si cet argument a pour valeur <code>secure</code>,
180 <code>true</code>, ou <code>1</code>, le cookie ne pourra être transmis
181 que dans le cadre d'une connexion sécurisée (https).</dd>
182
183 <dt>httponly</dt>
184 <dd>Si cet argument a pour valeur <code>HttpOnly</code>,
185 <code>true</code>, ou <code>1</code>, le cookie aura son drapeau
186 <code>HttpOnly</code> activé, ce qui signifie qu'il sera inaccessible au
187 code JavaScript pour les navigateurs qui supportent cette
188 fonctionnalité.</dd>
189 </dl>
190
191 <p>Voici un exemple :</p>
192
193 <pre class="prettyprint lang-config">
194 RewriteEngine On
195 RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.org:1440:/]
196 </pre>
197
198
199 <p>Dans l'exemple ci-dessus, la règle ne réécrit
200 pas la requête. La cible de réécriture "-"
201 indique à mod_rewrite de transmettre la requête sans
202 modification. Par contre, il
203 définit un cookie nommé 'frontdoor' avec une valeur 'yes'. Le cookie est
204 valide pour tout hôte situé dans le domaine <code>.example.org</code>. Sa
205 durée de vie est limitée à 1440 minutes (24 heures), et il sera renvoyé
206 pour tous les URIs.</p>
207
208 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
209 <div class="section">
210 <h2><a name="flag_dpi" id="flag_dpi">DPI|discardpath</a></h2>
211 <p>Avec le drapeau DPI, la partie PATH_INFO de l'URI
212 réécrit est supprimée.</p>
213 <p>Ce drapeau est disponible dans les versions 2.2.12 et supérieures.</p>
214 <p>Dans un contexte de répertoire, l'URI mis en comparaison par chaque
215 règle <code class="directive">RewriteRule</code> est la concaténation des
216 valeurs courantes de l'URI et de PATH_INFO.</p>
217
218 <p>L'URI courant peut être l'URI initial tel qu'il a été fourni par le
219 client, le résultat d'une passe précédente du processus de réécriture,
220 ou le résultat de la règle précédente dans le processus courant de
221 réécriture.</p>
222
223 <p>Par contre, la partie PATH_INFO ajoutée à l'URI avant chaque règle ne
224 reflète que la valeur de PATH_INFO avant la passe courante du processus
225 de réécriture. En conséquence, si de larges portions de l'URI
226 correspondent et sont traduites via plusieurs directives
227 <code class="directive">RewriteRule</code>, sans prendre en compte
228 quelles parties de l'URI provenaient du PATH_INFO courant, l'URI final
229 pourra se voir ajouter plusieurs copies de PATH_INFO.</p>
230
231 <p>Utilisez ce drapeau pour toute substitution où la présence du PATH_INFO qui
232 résultait de la mise en correspondance précédente de cette requête avec
233 le système de fichier n'est pas nécessaire. Avec ce drapeau, le
234 PATH_INFO établi avant que cette passe du processus de réécriture ne
235 débute est oublié. PATH_INFO ne sera pas recalculé tant que la passe
236 courante du processus de réécriture ne sera pas achevée. Les règles
237 suivantes de cette passe ne verront que le résultat direct des
238 substitutions, sans aucun PATH_INFO ajouté.</p>
239 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
240 <div class="section">
241 <h2><a name="flag_e" id="flag_e">E|env</a></h2>
242 <p>Avec le drapeau [E], ou [env], vous pouvez définir la valeur d'une
243 variable d'environnement. Notez que certaines variables d'environnement
244 peuvent être définies après le traitement de la règle, annulant par
245 la-même ce que vous avez défini. Voir le <a href="../env.html">document
246 sur les variables d'environnement</a> pour plus de détails sur le
247 fonctionnement des variables d'environnement.</p>
248
249 <p>La syntaxe complète pour ce drapeau est :</p>
250
251 <div class="example"><p><code>
252 [E=!VAR]
253 </code></p></div>
254
255 <p><code>VAL</code> peut comporter des références arrières
256 (<code>$N</code> ou <code>%N</code>) qui seront développées.</p>
257
258 <p>En utilisant la version courte</p>
259
260 <div class="example"><p><code>
261 [E=VAR]
262 </code></p></div>
263
264 <p>vous pouvez définir la variable d'environnement nommée
265 <code>VAR</code> avec une valeur vide.</p>
266
267 <p>La forme</p>
268
269 <div class="example"><p><code>
270 [E=!VAR]
271 </code></p></div>
272
273 <p>permet d'annuler la définition de la variable <code>VAR</code>.</p>
274
275 <p>Les variables d'environnement s'emploient dans différents contextes,
276 comme les programmes CGI, d'autres directives RewriteRule, ou des
277 directives CustomLog.</p>
278
279 <p>L'exemple suivant définit une variable d'environnement nommée 'image'
280 avec une valeur de '1' si l'URI de la requête correspond à un fichier
281 image. Cette variable d'environnement est ensuite utilisée pour exclure
282 une telle requête du journal des accès.</p>
283
284 <div class="example"><p><code>
285 RewriteRule \.(png|gif|jpg) - [E=image:1]<br />
286 CustomLog logs/access_log combined env=!image
287 </code></p></div>
288
289 <p>Notez que le même effet peut être obtenu à l'aide de la directive
290 <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>. Cette technique
291 est présentée à titre d'exemple et non de recommandation.</p>
292 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
293 <div class="section">
294 <h2><a name="flag_end" id="flag_end">END</a></h2>
295 <p>L'utilisation du drapeau [END] permet non seulement de terminer le
296 processus de réécriture en cours (comme [L]), mais aussi d'empêcher tout
297 processus de réécriture ultérieur dans un contexte de répertoire
298 (htaccess).</p>
299
300 <p>Ceci ne s'applique pas aux nouvelles requêtes résultant d'une
301 redirection externe.</p>
302 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
303 <div class="section">
304 <h2><a name="flag_f" id="flag_f">F|forbidden</a></h2>
305 <p>L'utilisation du drapeau [F] permet de faire envoyer par le serveur au
306 client un code de statut "403 Forbidden". Le même effet peut être obtenu à
307 l'aide de la directive <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>,
308 mais ce drapeau offre plus de souplesse dans l'attribution d'un statut
309 Forbidden.</p>
310
311 <p>La règle suivante va interdire la téléchargement de fichiers
312 <code>.exe</code> depuis votre serveur.</p>
313
314 <pre class="prettyprint lang-config">RewriteRule \.exe - [F]</pre>
315
316
317 <p>Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce
318 qui signifie que l'URI de la requête n'est pas modifié. Il n'y a aucune
319 raison de réécrire un URI, si vous avez l'intention d'interdire la
320 requête.</p>
321
322 <p>Lorsqu'on utilise [F], [L] est implicite - c'est à dire que la
323 réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.</p>
324
325 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
326 <div class="section">
327 <h2><a name="flag_g" id="flag_g">G|gone</a></h2>
328 <p>Le drapeau [G] permet de faire envoyer par le serveur un code de statut
329 "410 Gone" avec la réponse. Ce code indique qu'une ressource qui était
330 disponible auparavant ne l'est plus actuellement.</p>
331
332 <p>Comme dans le cas du drapeau [F], on utilise en général la syntaxe
333 "-" pour la cible de réécriture lorsqu'on utilise le drapeau [G] :</p>
334
335 <pre class="prettyprint lang-config">RewriteRule oldproduct - [G,NC]</pre>
336
337
338 <p>Lorsqu'on utilise [G], [L] est implicite - c'est à dire que la
339 réponse est renvoyée immédiatement, et aucune autre règle n'est évaluée.</p>
340
341 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
342 <div class="section">
343 <h2><a name="flag_h" id="flag_h">H|handler</a></h2>
344 <p>Force le traitement de la requête résultante par le gestionnaire
345 spécifié. Par exemple, on peut utiliser ce drapeau pour forcer
346 l'interprétation de tous les fichiers sans extension par le gestionnaire
347 php :</p>
348
349 <pre class="prettyprint lang-config">RewriteRule !\. -
350 [H=application/x-httpd-php]</pre>
351
352
353 <p>
354 L'expression rationnelle ci-dessus - <code>!\.</code> - correspond à
355 toute requête qui ne contient pas le caractère <code>.</code>.
356 </p>
357 <p>On peut aussi utiliser ce drapeau pour forcer l'utilisation d'un
358 certain gestionnaire en fonction de certaines conditions. Par exemple,
359 l'extrait suivant utilisé dans un contexte de niveau serveur permet de
360 faire en sorte que les fichiers <code>.php</code> soient
361 <em>affichés</em> par <code>mod_php</code> dans le cas où ils font
362 l'objet d'une requête avec l'extension <code>.phps</code> :</p>
363
364 <pre class="prettyprint lang-config">
365 RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
366 </pre>
367
368
369
370 <p>L'expression rationnelle ci-dessus -
371 <code>^(/source/.+\.php)s$</code> - va correspondre à toute requête qui
372 débutera par <code>/source/</code>, continuera par 1 ou n caractères
373 puis par <code>.phps</code>. La référence arrière $1 fait référence à la
374 correspondance capturée entre parenthèses de l'expression
375 rationnelle.</p>
376
377
378 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
379 <div class="section">
380 <h2><a name="flag_l" id="flag_l">L|last</a></h2>
381 <p>Lorsque le drapeau [L] est présent, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
382 arrête le traitement du jeu de règles. Cela signifie dans la plupart des
383 situations que si la règle s'applique, aucune autre règle ne sera
384 traitée. Ce drapeau correspond à la commande Perl <code>last</code>, ou
385 à la commande <code>break</code> en C. Utilisez ce drapeau pour indiquer
386 que la règle courante doit être appliquée immédiatement, sans tenir
387 compte des règles ultérieures.</p>
388
389 <p>Si vous utilisez des règles <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans des fichiers
390 <code>.htaccess</code> ou des sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, il est important d'avoir quelques
391 notions sur la manière dont les règles sont traitées. Pour simplifier,
392 une fois les règles traitées, la requête réécrite est passée à nouveau
393 au moteur d'interprétation des URLs afin que ce dernier puisse la
394 traiter. Il est possible qu'au cours du traitement de la requête
395 réécrite, le fichier <code>.htaccess</code> ou la section <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> soient à nouveau
396 rencontrés, entraînant un nouveau traitement du jeu de règles depuis le
397 début. Cette situation se présente le plus souvent lorsqu'une des règles
398 provoque une redirection - interne ou externe - ce qui réinitialise le
399 traitement de la requête.</p>
400
401 <p>Si vous utilisez des directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans un de ces contextes,
402 il importe par conséquent de prévoir explicitement des étapes permettant
403 d'éviter un bouclage infini sur les règles,
404 et de ne pas compter seulement sur
405 le drapeau [L] pour terminer l'exécution d'une série de règles, comme
406 décrit ci-dessous.</p>
407
408 <p>Un autre drapeau, [END], permet non seulement d'interrompre le cycle
409 courant du processus de réécriture, mais aussi d'empêcher toute
410 réécriture ultérieure dans le contexte de répertoire (htaccess). Ceci ne
411 s'applique pas aux nouvelles requêtes résultant de redirections
412 externes.</p>
413
414 <p>Dans l'exemple donné ici, toute requête est réécrite en
415 <code>index.php</code>, la requête originale étant ajoutée comme chaîne
416 de requête en argument à <code>index.php</code> ; cependant, la
417 directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> permet de s'assurer que si
418 la requête concerne déjà <code>index.php</code>, la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> sera sautée.</p>
419
420 <pre class="prettyprint lang-config">
421 RewriteBase /
422 RewriteCond %{REQUEST_URI} !=/index.php
423 RewriteRule ^(.*) /index.php?req=$1 [L,PT]
424 </pre>
425
426 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
427 <div class="section">
428 <h2><a name="flag_n" id="flag_n">N|next</a></h2>
429 <p>Le drapeau [N] provoque un redémarrage du traitement des règles
430 depuis le début, en utilisant le résultat du jeu de règles, sous
431 réserve qu'il existe un point de démarrage ; à utiliser avec précautions
432 car il peut provoquer un bouclage infini.
433 </p>
434 <p>
435 Le drapeau [Next] peut servir, par exemple,
436 à remplacer de manière répétitive
437 une chaîne de caractère ou une lettre dans une requête. Dans l'exemple
438 suivant, chaque occurence de A sera remplacée par B dans la requête, et
439 ceci jusqu'il n'y ait plus de A à remplacer.
440 </p>
441
442 <pre class="prettyprint lang-config">RewriteRule (.*)A(.*) $1B$2 [N]</pre>
443
444
445 <p>Vous pouvez vous représenter ce traitement comme une boucle
446 <code>while</code> : tant que le modèle de la règle correspond (c'est à
447 dire, tant que l'URI contient un <code>A</code>),
448 effectuer la substitution (c'est à dire, remplacer le <code>A</code> par
449 un <code>B</code>).</p>
450
451 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
452 <div class="section">
453 <h2><a name="flag_nc" id="flag_nc">NC|nocase</a></h2>
454 <p>Avec le drapeau [NC], le modèle de la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est comparé à la requête de
455 manière insensible à la casse. C'est à dire que cette comparaison
456 s'effectue sans tenir compte des majuscules/minuscules dans l'URI
457 comparé.</p>
458
459 <p>Dans l'exemple suivant, toute requête pour un fichier image sera
460 transmise par Apache à votre serveur d'images dédié. La correspondance est
461 insensible à la casse, si bien que par exemple, <code>.jpg</code> aussi
462 bien que <code>.JPG</code> seront acceptés.</p>
463
464 <pre class="prettyprint lang-config">RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]</pre>
465
466 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
467 <div class="section">
468 <h2><a name="flag_ne" id="flag_ne">NE|noescape</a></h2>
469 <p>Par défaut, les caractères spéciaux, comme <code>&amp;</code> et
470 <code>?</code>, sont convertis en leur équivalent
471 hexadécimal. Le drapeau [NE] permet d'éviter cette conversion.
472 </p>
473
474 <pre class="prettyprint lang-config">RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]</pre>
475
476
477 <p>
478 Dans l'exemple ci-dessus, <code>/anchor/xyz</code> est réécrit en
479 <code>/bigpage.html#xyz</code>. En l'absence du drapeau [NE], le #
480 aurait été converti en son équivalent hexadécimal, <code>%23</code>, ce
481 qui aurait provoqué un code d'erreur "404 Not Found".
482 </p>
483
484 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
485 <div class="section">
486 <h2><a name="flag_ns" id="flag_ns">NS|nosubreq</a></h2>
487 <p>Le drapeau [NS] empêche la règle de s'appliquer aux sous-requêtes.
488 Par exemple, une page incluse au moyen d'une SSI (Server
489 Side Include) est une sous-requête, et vous ne voudrez probablement pas que
490 la réécriture s'applique à ces sous-requêtes. Ainsi, lorsque
491 <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> recherche des informations à propos des
492 fichiers par défaut du répertoire (comme les fichiers
493 <code>index.html</code>), il s'agit d'une sous-requête interne, et vous
494 ne désirez en général pas que ces sous-requêtes soient réécrites. Cette
495 réécriture
496 n'est pas toujours utile pour les sous-requêtes, et peut même causer des
497 erreurs si l'ensemble du jeu de règles est appliqué. L'utilisation de
498 ce drapeau permet d'exclure les règles qui peuvent poser problème.</p>
499
500 <p>Comment déterminer si vous devez utiliser cette règle ou non : si
501 vous préfixez les URLs avec des scripts CGI, afin de forcer leur
502 traitement par le script CGI, vous vous exposez à des problèmes (ou du
503 moins à une surcharge significative) avec les sous-requêtes. Dans ces
504 cas, vous devez utiliser ce drapeau.</p>
505
506 <p>
507 Les images, scripts java, ou fichiers css, chargés en tant que partie
508 d'une page html, ne sont pas des sous-requêtes - le navigateur les
509 appelle sous forme de requêtes HTTP à part entière.
510 </p>
511 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
512 <div class="section">
513 <h2><a name="flag_p" id="flag_p">P|proxy</a></h2>
514 <p>L'utilisation du drapeau [P] entraîne le traitement de la requête par
515 le module <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, et ceci via une requête de
516 mandataire. Par exemple, si vous voulez que toutes les requêtes d'images
517 soient traitées par un serveur d'images annexe, vous pouvez utiliser
518 une règle de ce style :</p>
519
520 <pre class="prettyprint lang-config">RewriteRule /(.*)\.(jpg|gif|png)$ http://images.example.com/$1.$2 [P]</pre>
521
522
523 <p>L'utilisation du drapeau [P] provoque aussi l'effet du drapeau [L] -
524 autrement dit, la requête est immédiatement envoyée au mandataire, et
525 toute règle ultérieure sera ignorée.</p>
526
527 <p>
528 Vous devez vous assurer que la chaîne de substitution soit un URI valide
529 (commençant typiquement par <code>http://</code><em>nom-serveur</em>)
530 qui puisse être traitée par le module <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. Dans
531 le cas contraire, le module mandataire vous renverra une erreur.
532 L'utilisation de ce drapeau implémente de manière plus puissante la
533 directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>, pour
534 faire correspondre le contenu distant à l'espace de nommage du serveur
535 local.</p>
536
537 <div class="warning">
538       <h3>Avertissement à propos de la sécurité</h3>
539       <p>Lors de la construction de l'URL cible de la règle, il convient
540       de prendre en compte l'impact en matière de sécurité qu'aura le
541       fait de permettre au client d'influencer le jeu d'URLs pour
542       lesquelles votre serveur agira en tant que mandataire.
543       Assurez-vous que la partie protocole://nom-serveur de l'URL soit
544       fixe, ou ne permette pas au client de l'influencer induement.</p>
545 </div>
546
547 <div class="warning">
548       <h3>Avertissement au sujet des performances</h3>
549       <p>Utiliser ce drapeau fait intervenir <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> sans la gestion des connexions
550       persistantes, ce qui signifie que vous obtiendrez des performances meilleurs si vous utilisez
551       <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="../mod/mod_proxy.html#proxypassmatch">ProxyPassMatch</a></code>.</p>
552       <p>Ceci est du au fait que ce drapeau induit l'utilisation du worker par défaut, qui
553       ne gère pas la mise en commun des connexions.</p>
554       <p>Partout où cela est possible, préférez l'utilisation de ces directives.</p>
555 </div>
556
557 <p>Note: <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> doit être activé pour pouvoir
558 utiliser ce drapeau.</p>
559
560 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
561 <div class="section">
562 <h2><a name="flag_pt" id="flag_pt">PT|passthrough</a></h2>
563
564 <p>
565 Par défaut, la cible (ou chaîne de substitution) d'une règle
566 RewriteRule est sensée être un chemin de fichier. Avec le drapeau [PT],
567 par contre, elle est traitée comme un URI. Autrement dit, avec le
568 drapeau [PT], le résultat de la règle  <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est passé à nouveau au
569 système de mise en correspondance des URLs avec le système de fichiers,
570 de façon à ce que les systèmes de mise en correspondance basés sur les
571 chemins de fichiers, comme la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code>, ou <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>, par exemple, puissent avoir une
572 chance d'accomplir leur tâche.
573 </p>
574
575 <p>
576 Si par exemple, vous avez un <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> pour /icons, et une règle  <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> qui renvoie vers /icons,
577 vous devez utiliser le drapeau [PT] pour être sûr que l'<code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> sera bien évalué.
578 </p>
579
580 <pre class="prettyprint lang-config">
581 Alias /icons /usr/local/apache/icons
582 RewriteRule /pics/(.+)\.jpg$ /icons/$1.gif [PT]
583 </pre>
584
585
586 <p>
587 Dans l'exemple précédent, en l'absence du drapeau [PT], l'Alias aurait
588 été ignoré, ce qui aurait provoqué une erreur 'File not found'.
589 </p>
590
591 <p>Avec le drapeau <code>PT</code>, le drapeau <code>L</code> est
592 implicite : la réécriture s'arrêtera afin de transmettre la requête à la
593 phase suivante du traitement.</p>
594
595 <p>Notez que le drapeau <code>PT</code> est implicite dans des contextes
596 de répertoire comme les sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ou les fichiers
597 <code>.htaccess</code>. Le seul moyen de contourner ceci consiste à
598 réécrire vers <code>-</code>.</p>
599
600 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
601 <div class="section">
602 <h2><a name="flag_qsa" id="flag_qsa">QSA|qsappend</a></h2>
603 <p>
604 Quand l'URI de remplacement contient une chaîne de requête, le
605 comportement par défaut de la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> est de supprimer la <code>
606 query string</code> (il s'agit des paramètres éventuellement passés dans l'URL après le
607 caractère <code>?</code>, usuellement pour les formulaires traités par la
608 méthode HTTP <code>GET</code>) existante, et de la remplacer par celle nouvellement créée.
609 Avec le drapeau [QSA], les chaînes de requête peuvent être combinées.
610 </p>
611
612 <p>Considérons la règle suivante :</p>
613
614 <pre class="prettyprint lang-config">RewriteRule /pages/(.+) /page.php?page=$1
615 [QSA]</pre>
616
617
618 <p>Avec le drapeau [QSA], une requête pour
619 <code>/pages/123?one=two</code> sera réécrite en
620 <code>/page.php?page=123&amp;one=two</code>. Sans le drapeau [QSA], la
621 même requête sera réécrite en <code>/page.php?page=123</code> -
622 autrement dit, la chaîne de requête (<code>query string</code>) existante sera supprimée.
623 </p>
624 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
625 <div class="section">
626 <h2><a name="flag_qsd" id="flag_qsd">QSD|qsdiscard</a></h2>
627 <p>
628 Lorsque l'URI de la requête contient une chaîne de paramètres, et si
629 l'URI cible n'en contient pas, le comportement par défaut de la
630 directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> consiste à copier cette
631 chaîne de paramètres dans l'URI cible. Avec le drapeau [QSD], la chaîne
632 de paramètres est supprimée.
633 </p>
634
635 <p>Ce drapeau est disponible dans les versions 2.4.0 et supérieures.</p>
636
637 <p>
638 Lorsque les drapeaux [QSD] et [QSA] sont utilisés ensemble, c'est le
639 drapeau [QSD] qui l'emporte.
640 </p>
641
642 <p>
643 Si l'URI cible possède une chaîne de paramètres, le comportement par
644 défaut sera respecté - c'est à dire que la chaîne de paramètres
645 originale sera supprimée et remplacée par la chaîne de paramètres de
646 l'URI cible.
647 </p>
648
649 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
650 <div class="section">
651 <h2><a name="flag_r" id="flag_r">R|redirect</a></h2>
652 <p>
653 L'utilisation du drapeau [R] provoque l'envoi d'une redirection au
654 navigateur. Si une URL pleinement qualifiée (FQDN - fully qualified domain name)
655  est spécifiée (c'est à dire incluant <code>http://nom-du-serveur/</code>),
656  une redirection sera effectuée vers cette adresse. Dans le cas contraire,
657  le protocole courant, le nom du serveur et le numéro de port seront
658  utilisés pour générer l'URL envoyée avec la redirection.
659 </p>
660
661 <p><em>Tout</em> code de statut de réponse HTTP valide peut être
662 spécifié, en utilisant la syntaxe [R=305], le code de statut 302 étant
663 utilisé par défaut si aucun code n'est spécifié. Le code de statut
664 spécifié n'est pas nécessairement un code de statut
665 de redirection (3xx). Cependant, si le code de statut est en dehors de la plage des codes de
666 redirection (300-399), la chaîne de substitution est entièrement
667 supprimée, et la réécriture s'arrête comme si le drapeau <code>L</code>
668 était utilisé.</p>
669
670 <p>En plus des codes de statut de réponse, vous pouvez spécifier les
671 codes de redirection en utilisant leurs noms symboliques :
672 <code>temp</code> (défaut), <code>permanent</code>, ou
673 <code>seeother</code>.</p>
674
675 <p>
676 Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est à
677 dire [R,L]), car employé seul, le drapeau [R] préfixe l'URI avec
678 <code>http://cet-hôte[:ce-port]</code>, mais passe ensuite cette adresse
679 à la règle suivante, ce qui provoquera le plus souvent des
680 avertissements 'Invalid URI in request'.
681 </p>
682
683 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
684 <div class="section">
685 <h2><a name="flag_s" id="flag_s">S|skip</a></h2>
686 <p>Le drapeau [S] sert à sauter des règles que vous ne voulez pas voir
687 exécuter. La syntaxe du drapeau [S] est [S=<em>N</em>], où
688 <em>N</em> correspond au nombre de règles à sauter.
689 Ceci peut s'interpréter comme une instruction
690 <code>goto</code>  dans votre jeu de règles de réécriture. Dans
691 l'exemple suivant, nous ne voulons exécuter la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> que si l'URI demandé ne
692 correspond pas à un fichier existant.</p>
693 <pre class="prettyprint lang-config">
694 # La requête concerne-t-elle un fichier qui n'existe pas ?
695 RewriteCond %{REQUEST_FILENAME} !-f
696 RewriteCond %{REQUEST_FILENAME} !-d
697 # Si c'est la cas, on saute les deux règles de réécriture suivantes
698 RewriteRule .? - [S=2]
699
700 RewriteRule (.*\.gif) images.php?$1
701 RewriteRule (.*\.html) docs.php?$1
702 </pre>
703
704
705
706
707 <p>Cette technique trouve son utilité dans le fait qu'une directive
708 <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> ne s'applique
709 qu'à la règle qui la suit immédiatement. Ainsi, si vous voulez
710 qu'une directive <code>RewriteCond</code> s'applique à plusieurs règles
711 <code>RewriteRule</code>, une technique possible consiste à inverser ces
712 conditions et ajouter une <code>RewriteRule</code> avec le drapeau [Skip]. Cette technique permet
713 d'élaborer des pseudo-constructions if-then-else : la dernière règle du
714 bloc then contiendra <code>skip=N</code>, où N est le nombre de règles
715 contenues dans le bloc else :</p>
716 <pre class="prettyprint lang-config">
717 # Est-ce que le fichier existe ?
718 RewriteCond %{REQUEST_FILENAME} !-f
719 RewriteCond %{REQUEST_FILENAME} !-d
720 # Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.
721 RewriteRule .? - [S=3]
722
723 # Si le fichier existe, alors :
724 RewriteRule (.*\.gif) images.php?$1
725     RewriteRule (.*\.html) docs.php?$1
726     # Skip past the "else" stanza.
727     RewriteRule .? - [S=1]
728 # ELSE...
729 RewriteRule (.*) 404.php?file=$1
730 # END
731 </pre>
732
733
734 <p>Il est probablement plus aisé de définir ce genre de configuration
735 via les directives <code class="directive">&lt;If&gt;</code>, <code class="directive">&lt;ElseIf&gt;</code>, et <code class="directive">&lt;Else&gt;</code>.</p>
736
737 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
738 <div class="section">
739 <h2><a name="flag_t" id="flag_t">T|type</a></h2>
740 <p>Définit le type MIME de la réponse résultante renvoyée. L'effet est
741 identique à celui de la directive <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code>.</p>
742
743 <p>Par exemple, vous pouvez utiliser la technique suivante pour servir
744 du code source Perl en tant que plein texte, s'il est requis d'une
745 certaine manière :</p>
746
747 <pre class="prettyprint lang-config">
748 # Sert les fichier .pl en tant que plein texte
749 RewriteRule \.pl$ - [T=text/plain]
750 </pre>
751
752
753 <p>Ou encore, si vous possédez une caméra qui produit des fichiers
754 images jpeg sans extension, vous pouvez forcer le renvoi de ces images
755 avec le type MIME correct en se basant sur le nom du fichier :</p>
756
757 <pre class="prettyprint lang-config">
758 # Les fichiers dont le nom contient 'IMG' sont des images jpg.
759 RewriteRule IMG - [T=image/jpg]
760 </pre>
761
762
763 <p>Notez cependant qu'il s'agit d'un exemple trivial, et que le problème
764 aurait pu être résolu en utilisant à la place la directive <code class="directive"><a href="../mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>. Il faut toujours
765 envisager la possibilité d'une solution alternative à un problème avant
766 d'avoir recours à la réécriture, qui sera toujours moins efficace qu'une
767 solution alternative.</p>
768
769 <p>
770 Dans un contexte de niveau répertoire, n'utilisez que <code>-</code>
771 (tiret) comme substitution, <em>dans toute la séquence de réécriture de
772 mod_rewrite</em>, sinon le type MIME défini avec ce drapeau
773 sera perdu suite à un retraitement interne (y compris les séquences de
774 réécriture suivantes de mod_rewrite). Dans ce contexte, vous pouvez
775 utiliser le drapeau <code>L</code> pour terminer la séquence
776 <em>courante</em> de réécriture de mod_rewrite.</p>
777
778 </div></div>
779 <div class="bottomlang">
780 <p><span>Langues Disponibles: </span><a href="../en/rewrite/flags.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
781 <a href="../fr/rewrite/flags.html" title="Français">&nbsp;fr&nbsp;</a></p>
782 </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>
783 <script type="text/javascript"><!--//--><![CDATA[//><!--
784 var comments_shortname = 'httpd';
785 var comments_identifier = 'http://httpd.apache.org/docs/2.4/rewrite/flags.html';
786 (function(w, d) {
787     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
788         d.write('<div id="comments_thread"><\/div>');
789         var s = d.createElement('script');
790         s.type = 'text/javascript';
791         s.async = true;
792         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
793         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
794     }
795     else { 
796         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
797     }
798 })(window, document);
799 //--><!]]></script></div><div id="footer">
800 <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>
801 <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[//><!--
802 if (typeof(prettyPrint) !== 'undefined') {
803     prettyPrint();
804 }
805 //--><!]]></script>
806 </body></html>