| <!DOCTYPE html SYSTEM "about:legacy-compat"> | |
| <html lang="fr"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
| <meta content="width=device-width, initial-scale=1" name="viewport"> | |
| <!-- | |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| This file is generated from xml source: DO NOT EDIT | |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| --> | |
| <title>Détails techniques sur le module Apache mod_rewrite - Serveur HTTP Apache Version 2.5</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"> | |
| </script> | |
| <link href="../images/favicon.png" rel="shortcut icon"></head> | |
| <body id="manual-page"><div id="page-header"> | |
| <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p> | |
| <p class="apache">Serveur HTTP Apache Version 2.5</p> | |
| <img alt="" src="../images/feather.png"></div> | |
| <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div> | |
| <div id="path"> | |
| <a href="https://www.apache.org/">Apache</a> > <a href="https://httpd.apache.org/">Serveur HTTP</a> > <a href="https://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Détails techniques sur le module Apache mod_rewrite</h1> | |
| <button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button> | |
| <div class="toplang"> | |
| <p><span>Langues Disponibles: </span><a href="../de/rewrite/tech.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/tech.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/tech.html" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/tech.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/tech.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/tech.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/tech.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> | |
| </div> | |
| <p>Ce document passe en revue certains détails techniques à propos du | |
| module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> 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="#order">Module Processing Order</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#encoding">Encodage et décodage des URLs</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#InternalRuleset">Traitement du jeu de règles</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="flags.html">Drapeaux de réécriture</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="htaccess.html">Réécritures en fonction du répertoire</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li></ul></div> | |
| <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="InternalAPI">Phases de l'API <a title="Lien permanent" href="#InternalAPI" class="permalink">¶</a></h2> | |
| <p>Le traitement des requêtes par le serveur HTTP Apache se | |
| déroule en plusieurs phases. Au cours de chaque phase, un ou | |
| plusieurs modules peuvent être appelés pour traiter la partie | |
| concernée du cycle de vie de la requête. Les différentes 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><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> agit dans deux de ces phases (ou accroches - hooks - | |
| comme on les nomme souvent) pour la réécriture des URLs.</p> | |
| <p>Tout d'abord, il utilise le hook traduction URL vers nom de | |
| fichier qui intervient après la lecture de la requête HTTP, mais | |
| avant le processus d'autorisation. Ensuite, il utilise le hook | |
| Fixup, qui intervient après les phases d'autorisation, après la | |
| lecture des fichiers de configuration de niveau répertoire (fichiers | |
| <code>.htaccess</code>), mais avant l'appel du gestionnaire de | |
| contenu.</p> | |
| <p>Lorsqu'une requête arrive et une fois le serveur | |
| correspondant ou le serveur virtuel déterminé, le moteur de | |
| réécriture commence à traiter toute directive <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> 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"><Virtualhost></a></code>). | |
| Tout ce processus s'exécute au cours de la phase de traduction URL | |
| vers nom de fichier.</p> | |
| <p>Quelques étapes plus loin, une fois les répertoires de données | |
| finaux trouvés, les directives de configuration de niveau répertoire | |
| (fichiers <code>.htaccess</code> et sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>) sont appliquées. Ce processus | |
| s'exécute au cours de la phase Fixup.</p> | |
| <p>Dans tous ces cas, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> réécrit le | |
| <code>REQUEST_URI</code> soit vers un nouvel URL, soit vers un | |
| nom de fichier.</p> | |
| <p>Dans un <a class="glossarylink" href="../glossary.html#perdirectory" title="voir glossaire">contexte de répertoire</a>, | |
| les règles sont appliquées durant la phase "Fixup" après que l’URL a été | |
| traduit en nom de fichier. Cela modifie ce à quoi correspond le motif et la | |
| manière dont les substitutions sont gérées. Voir le document <a href="htaccess.html#path-stripping">Réécritures en fonction du | |
| répertoire</a> pour des détails pratiques à propos de la suppression du | |
| chemin, de RewriteBase et de la manière d’éviter un bouclage.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="order">Module Processing Order <a title="Lien permanent" href="#order" class="permalink">¶</a></h2> | |
| <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> et <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> agissent tous | |
| les deux au cours de la phase de traduction de l’URL en nom de fichier, mais | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> opère en premier, quel que soit l’ordre | |
| d’apparition des directives dans le fichier de configuration. Ce | |
| comportement est déterminé par la priorité des points d’accroche | |
| qu’enregistre chaque module, pas par l’ordre du code source.</p> | |
| <p>La conséquence pratique : lorsque des directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> et <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> (ou <code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code>) sont présentent simultanément | |
| dans le même contexte de serveur virtuel ou global au serveur, les règles de | |
| réécriture sont évaluées en premier. Si une règle <code>RewriteRule</code> | |
| correspond et réécrit le chemin d’URL (ou renvoie une redirection), | |
| <code>Redirect</code> ne verra jamais la requête.</p> | |
| <p class="figure"> | |
| <img src="../images/rewrite_module_order.png" alt="Comparaison côte-à-côte des ordres d’opération des modules : dans un contexte global au serveur, mod_rewrite opère en premier lors de la phase de traduction du chemin d’URL en nom de fichier, mod_alias opèrant en second ; dans un contexte de répertoire, mod_alias opère en premier lors de la phase de traduction du chemin d’URL en nom de fichier, mod_rewrite opérant plus tard lors de la phase de correction"><br> | |
| <dfn>Figure :</dfn> Inversion de l’ordre d’opération des modules entre les | |
| contextes global au serveur et de répertoire | |
| </p> | |
| <pre class="prettyprint lang-config"># Dans cette configuration, le Redirect n’est jamais atteint pour /old, | |
| # car la règle RewriteRule s’applique en premier — même si | |
| # Redirect apparaît plus tôt dans le fichier. | |
| Redirect "/old" "http://example.com/new" | |
| RewriteRule "^/old" "/other" [L]</pre> | |
| <div class="note"><h3>Le contexte de répertoire inverse l’ordre</h3> | |
| <p>Dans un <a class="glossarylink" href="../glossary.html#perdirectory" title="voir glossaire">contexte de répertoire</a>, | |
| la situation est différente. Les directives de <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> | |
| comme <code>Redirect</code> s’appliquent encore dans la phase de traduction | |
| de l’URL en nom de fichier, mais les directives de | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> s’appliquent plus tard, lors de la phase de | |
| correction. Cela signifie que dans un contexte de répertoire, | |
| <code>Redirect</code> est évaluée <em>avant</em> l’application des | |
| règles <code>RewriteRule</code>.</p> | |
| </div> | |
| <p>Du fait de l’incohérence entre les contextes, mélanger des directives de | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> et de <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> dans la même | |
| portée est une source courante de confusion. Un conseil simple : choisissez | |
| un module pour une tâche donnée. Si vous avez besoin de conditions de | |
| réécritures ou de comparaison de motif, utilisez exclusivement | |
| <code>RewriteRule</code>. Si une simple redirection de préfixe suffit, | |
| utilisez la directive <code>Redirect</code> et n’ajoutez pas de règles de | |
| réécritures qui pourraient interagir avec elle.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="encoding">Encodage et décodage des URLs <a title="Lien permanent" href="#encoding" class="permalink">¶</a></h2> | |
| <p>Apache httpd supprime l’échappement des caractères encodés pour l’URL | |
| dans le chemin d’URL de la requête avant que toute comparaison de motif de | |
| directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ne soit | |
| effectuée. Une requête pour <code>/my%20page/cats%3Fdogs</code> est décodée | |
| en <code>/my page/cats?dogs</code>, et c’est à cette chaîne décodée qu’est | |
| comparé le motif de la directive <code>RewriteRule</code>.</p> | |
| <p>Cela signifie que vous ne pouvez pas écrire un motif correspondant à la | |
| forme littérale de l’URL encodé. Si vous devez distinguer | |
| <code>/horses%2Fponies</code> de <code>/horses/ponies</code>, utilisez la | |
| variable <code>%{THE_REQUEST}</code> dans une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> — cette variable conserve la | |
| requête originelle telle qu’elle a été envoyée par le client, avant tout | |
| décodage :</p> | |
| <pre class="prettyprint lang-config"># Ne correspond qu’au caractère encodé littéral %2F, | |
| # pas au séparateur de chemin réel | |
| RewriteCond "%{THE_REQUEST}" "/horses%2F" | |
| RewriteRule "^/horses/ponies$" "/special-handler" [L]</pre> | |
| <p>Après la substitution, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> réencode le chemin | |
| d’URL résultant en sortie. Plusieurs drapeaux permettent de contrôler ce | |
| comportement :</p> | |
| <ul> | |
| <li><a href="flags.html#flag_b">[B]</a> : rétablit l’échappement des | |
| références arrières de façon que les caractères spéciaux capturés dans le | |
| chemin d’URL décodé ne soient pas interprétés comme des délimiteurs dans | |
| la substitution.</li> | |
| <li><a href="flags.html#flag_bnp">[BNP]</a> : si [B] est actif, ce drapeau | |
| encode les espaces en <code>%20</code> au lieu de <code>+</code> (convient | |
| pour les éléments du chemin, pas pour la chaîne de paramètres).</li> | |
| <li><a href="flags.html#flag_ne">[NE]</a> : ce drapeau supprime | |
| l’échappement par défaut des caractères spéciaux dans le résultat de la | |
| substitution, permettant la transmission sans modification des littéraux | |
| <code>#</code>, <code>?</code> et d’autres caractères lors des | |
| redirections externes.</li> | |
| </ul> | |
| <h3 id="allowencodedslashes">Directive AllowEncodedSlashes</h3> | |
| <p>Par défaut, httpd renvoie un code 404 pour tout URL contenant une barre | |
| oblique encodée (<code>%2F</code>). La directive <code class="directive"><a href="../mod/core.html#allowencodedslashes">AllowEncodedSlashes</a></code> permet de modifier ce | |
| comportement :</p> | |
| <ul> | |
| <li><code>Off</code> (valeur par défaut) : rejette <code>%2F</code> avec | |
| un code 404.</li> | |
| <li><code>On</code> : autorise <code>%2F</code> et le décode en | |
| <code>/</code> avant de le transmettre aux gestionnaires.</li> | |
| <li><code>NoDecode</code> : autorise <code>%2F</code>, mais le conserve | |
| sous sa forme encodée de façon que l’application dorsale le distingue d’un | |
| séparateur de chemin réel.</li> | |
| </ul> | |
| <p>Lorsqu’on utilise le drapeau <a href="flags.html#flag_b">[B]</a> avec des | |
| URLs qui peuvent contenir des barres obliques encodées, il est en général | |
| nécessaire d’utiliser <code>AllowEncodedSlashes NoDecode</code> pour éviter | |
| que httpd ne rejette le résultat réencodé.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="InternalRuleset">Traitement du jeu de règles <a title="Lien permanent" href="#InternalRuleset" class="permalink">¶</a></h2> | |
| <p>Maintenant, quand <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> se lance dans ces deux | |
| phases de l'API, il lit le jeu de règles configuré depuis la structure | |
| contenant sa configuration (qui a été elle-même créée soit au démarrage | |
| d'Apache httpd pour le contexte du serveur, soit lors du parcours des | |
| répertoires par le noyau d'Apache httpd pour le contexte de répertoire). | |
| Puis le moteur de réécriture est démarré avec le jeu de règles contenu | |
| (une ou plusieurs règles associées à leurs conditions). En lui-même, le | |
| mode opératoire du moteur de réécriture d'URLs est exactement le même dans | |
| les deux contextes de configuration. Seul le traitement du résultat final | |
| diffère.</p> | |
| <p class="figure"> | |
| <img src="../images/mod_rewrite_fig1.png" alt="Survol du processus de réécriture par requête lors des phases par serveur et par répertoire"><br> | |
| <dfn>Figure 1 :</dfn>Le processus de réécriture par requête montrant les | |
| deux phases du traitement des règles (par serveur et par répertoire) | |
| </p> | |
| <p>L'ordre dans lequel les règles sont définies est important car le | |
| moteur de réécriture les traite selon une chronologie particulière (et pas | |
| très évidente). Le principe est le suivant : 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 à la suite des | |
| autres, et lorsqu'une règle s'applique, il parcourt les éventuelles | |
| conditions (directives <code>RewriteCond</code>directives) associées. | |
| Pour des raisons historiques, les conditions précèdent les règles, si bien | |
| que le déroulement du contrôle est un peu compliqué. Voir la figure 2 pour | |
| plus de détails.</p> | |
| <p class="figure"> | |
| <img src="../images/rewrite_process_uri.png" alt="Organigramme montrant le flux de contrôle par règle : pour chaque règle, comparaison du motif avec l’URL, évaluation des conditions RewriteCond, application de la substitution si les deux opérations précédentes ont réussi, puis consultation des drapeaux pour déterminer si l’on doit arrêter le traitement ou continuer avec la règle suivante"><br> | |
| <dfn>Figure 2 :</dfn>Le flux de contrôle en parcourant le jeu de règles de | |
| réécriture | |
| </p> | |
| <p>L'URL est tout d'abord comparé au | |
| <em>Modèle</em> de chaque règle. Lorsqu'une règle ne s'applique | |
| pas, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> stoppe immédiatement le traitement de cette règle | |
| et passe à la règle suivante. Si l'URL correspond au | |
| <em>Modèle</em>, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> recherche la présence de conditions | |
| correspondantes (les directives Rewritecond apparaissant dans la | |
| configuration juste | |
| avant les règles de réécriture). S'il n'y en a pas, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> remplace | |
| l'URL par une chaîne élaborée à partir de la chaîne de | |
| <em>Substitution</em>, puis passe à la règle suivante. Si des | |
| conditions sont présentes, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> lance un bouclage | |
| secondaire afin de les traiter selon l'ordre dans lequel elles | |
| sont définies. La logique de traitement des conditions est | |
| différente : on ne compare pas l'URL à un modèle. Une chaîne de | |
| test <em>TestString</em> est tout d'abord élaborée en développant | |
| des variables, des références arrières, des recherches dans des | |
| tables de correspondances, etc..., puis cette chaîne de test est | |
| comparée au modèle de condition <em>CondPattern</em>. Si le modèle | |
| ne correspond pas, les autres conditions du jeu ne sont pas | |
| examinées et la règle correspondante ne s'applique pas. Si le | |
| modèle correspond, la condition suivante est examinée et ainsi de | |
| suite jusqu'à la dernière condition. Si toutes les conditions sont | |
| satisfaites, le traitement de la règle en cours se poursuit avec | |
| le remplacement de l'URL par la chaîne de <em>Substitution</em>.</p> | |
| <p class="figure"> | |
| <img src="../images/mod_rewrite_fig2.png" alt="Flux des références arrières entre les directives RewriteRule et RewriteCond"><br> | |
| <dfn>Figure 3 :</dfn>Le flux des références arrières dans une règle | |
| Tout d’abord, le motif de la règle RewriteRule est comparé ; ses captures | |
| ($1...$9) sont disponibles dans toutes les chaînes de test des conditions | |
| RewriteCond. Les dernières captures du motif de la condition qui | |
| correspondent (%1...%9) sont disponibles dans la substitution. | |
| </p> | |
| </div></div> | |
| <div class="bottomlang"> | |
| <p><span>Langues Disponibles: </span><a href="../de/rewrite/tech.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/tech.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/tech.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/tech.html" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/tech.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/tech.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/tech.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/tech.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> | |
| </div><div id="footer"> | |
| <p class="apache">Copyright 2026 The Apache Software Foundation.<br>Autorisé sous <a href="https://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/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p></div><script><!--//--><![CDATA[//><!-- | |
| if (typeof(prettyPrint) !== 'undefined') { | |
| prettyPrint(); | |
| } | |
| var langToggle = document.querySelector('.lang-toggle'); | |
| var topLang = document.querySelector('.toplang'); | |
| if (langToggle && topLang) { | |
| langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); }); | |
| } | |
| var qv = document.getElementById('quickview'); | |
| if (qv) { | |
| document.body.appendChild(qv); | |
| var qvBtn = document.createElement('button'); | |
| qvBtn.className = 'qv-toggle'; | |
| qvBtn.setAttribute('aria-label', 'Toggle page navigation'); | |
| qvBtn.innerHTML = '☰'; | |
| document.body.appendChild(qvBtn); | |
| qvBtn.addEventListener('click', function() { | |
| var isOpen = qv.classList.toggle('open'); | |
| if (isOpen) { | |
| qv.style.top = window.scrollY + 10 + 'px'; | |
| } | |
| }); | |
| window.addEventListener('scroll', function() { qv.classList.remove('open'); }); | |
| } | |
| //--><!]]></script> | |
| </body></html> |