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>Advanced Techniques with 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" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" /> 12<script src="/style/scripts/prettify.min.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="<-" alt="<-" src="/images/left.gif" /></a></div> 21<div id="path"> 22<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Advanced Techniques with mod_rewrite</h1> 23<div class="toplang"> 24<p><span>Langues Disponibles: </span><a href="/en/rewrite/advanced.html" hreflang="en" rel="alternate" title="English"> en </a> | 25<a href="/fr/rewrite/advanced.html" title="Fran�ais"> fr </a></p> 26</div> 27 28 29<p>Ce document compl�te la <a href="/mod/mod_rewrite.html">documentation de r�f�rence</a> du 30 module <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>. Il pr�sente un certain nombre 31 de techniques avanc�es quant � 32 l'utilisation de mod_rewrite.</p> 33 34<div class="warning">Notez que la plupart des exemples ne fonctionneront 35pas en l'�tat dans la configuration particuli�re de votre serveur ; il 36est donc important de bien comprendre leur fonctionnement, plut�t que de 37simplement les copier/coller dans votre configuration.</div> 38 39</div> 40<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#sharding">Distribution de la charge entre plusieurs serveurs 41 d'arri�re-plan en fonction de l'adresse IP</a></li> 42<li><img alt="" src="/images/down.gif" /> <a href="#on-the-fly-content">R�g�neration de contenu � la vol�e</a></li> 43<li><img alt="" src="/images/down.gif" /> <a href="#load-balancing">R�partition de charge</a></li> 44<li><img alt="" src="/images/down.gif" /> <a href="#autorefresh">Actualisation automatique d'un document</a></li> 45<li><img alt="" src="/images/down.gif" /> <a href="#structuredhomedirs">R�pertoires Home structur�s</a></li> 46<li><img alt="" src="/images/down.gif" /> <a href="#redirectanchors">Redirection des ancrages</a></li> 47<li><img alt="" src="/images/down.gif" /> <a href="#time-dependent">R��criture d�pendant de l'heure</a></li> 48<li><img alt="" src="/images/down.gif" /> <a href="#setenvvars">D�finir des variables d'environnement en fonction de 49 certaines parties de l'URL</a></li> 50</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 et remise en 51correspondance</a></li><li><a href="access.html">Contr�ler l'acc�s</a></li><li><a href="vhosts.html">serveurs virtuels</a></li><li><a href="proxy.html">serveurs mandataires</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</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> 52<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 53<div class="section"> 54<h2><a name="sharding" id="sharding">Distribution de la charge entre plusieurs serveurs 55 d'arri�re-plan en fonction de l'adresse IP</a></h2> 56 57 58 59 <dl> 60 <dt>Description :</dt> 61 62 <dd> 63 <p>La fragmentation ou "sharding" est une technique courante de 64 distribution de la charge du serveur ou de l'espace de stockage. 65 Quand on utilise cette m�thode, un serveur frontal utilise l'URL 66 pour r�partir de mani�re appropri�e les utilisateurs et objets 67 entre diff�rents serveurs d'arri�re-plan.</p> 68 </dd> 69 70 <dt>Solution :</dt> 71 72 <dd> 73 <p>On maintient une table de correspondance entre utilisateurs et 74 serveurs cibles dans des fichiers externes. Ces derniers se 75 pr�sentent comme suit :</p> 76 77<div class="example"><p><code> 78utilisateur1 serveur_physique_utilisateur1<br /> 79utilisateur2 serveur_physique_utilisateur2<br /> 80: : 81</code></p></div> 82 83 <p>Tout ceci est enregistr� dans un fichier 84 <code>correspondances-utilisateurs-serveurs</code>. Le but est de 85 faire correspondre</p> 86 87<div class="example"><p><code> 88/u/utilisateur1/chemin 89</code></p></div> 90 91 <p>avec</p> 92 93<div class="example"><p><code> 94http://serveur_physique_utilisateur1/u/utilisateur/chemin 95</code></p></div> 96 97 <p>il n'est ainsi pas n�cessaire que tous les chemins URL soient 98 valides sur tous les serveurs physiques d'arri�re-plan. Le jeu de 99 r�gles suivant fait tout ceci pour nous, en s'appuyant sur les 100 fichiers de correspondances, en supposant que serveur0 est un 101 serveur par d�faut qui sera utilis� lorsqu'un utilisateur ne 102 poss�dera pas d'entr�e dans la table de correspondances :</p> 103 104<pre class="prettyprint lang-config">RewriteEngine on 105RewriteMap users-to-hosts txt:/path/to/map.users-to-hosts 106RewriteRule ^/u/([^/]+)/?(.*) http://${users-to-hosts:$1|server0}/u/$1/$2</pre> 107 108 </dd> 109 </dl> 110 111 <p>Voir la documentation de <code class="directive"><a href="/mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> pour une description plus 112 approfondie de la syntaxe de cette directive.</p> 113 114</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 115<div class="section"> 116<h2><a name="on-the-fly-content" id="on-the-fly-content">R�g�neration de contenu � la vol�e</a></h2> 117 118 119 120 <dl> 121 <dt>Description :</dt> 122 123 <dd> 124 <p>Nous voulons g�n�rer du contenu de mani�re dynamique, mais le 125 conserver de mani�re statique lorsqu'il a �t� g�n�r�. La r�gle 126 suivante v�rifie l'existence du fichier statique, et le g�n�re 127 s'il est absent. Les fichiers statiques peuvent �tre supprim�s 128 p�riodiquement si on le d�sire (par exemple via cron), et seront 129 r�g�n�r�s � la demande.</p> 130 </dd> 131 132 <dt>Solution :</dt> 133 134 <dd> 135 A cet effet, on utilise le jeu de r�gles suivant : 136 137<pre class="prettyprint lang-config"># Cet exemple n'est valable que dans un contexte de r�pertoire 138RewriteCond %{REQUEST_URI} !-U 139RewriteRule ^(.+)\.html$ /regenerate_page.cgi [PT,L]</pre> 140 141 142 <p>L'op�rateur <code>-U</code> permet de d�terminer si la cha�ne 143 de test (dans ce cas <code>REQUEST_URI</code>) est une URL valide. 144 Pour ce faire, il utilise une sous-requ�te. Si cette sous-requ�te 145 �choue, ou en d'autres termes, si la ressource demand�e n'existe pas, 146 cette r�gle invoque le programme CGI 147 <code>/regenerate_page.cgi</code> qui g�n�re la ressource 148 demand�e et la sauvegarde dans le r�pertoire des documents, de 149 fa�on � ce qu'une copie statique puisse �tre servie lors d'une 150 demande ult�rieure.</p> 151 152 <p>De cette fa�on, les documents qui ne sont pas mis � jour 153 r�guli�rement peuvent �tre servis sous une forme statique. Si ces 154 documents doivent �tre r�actualis�s, on peut les supprimer du 155 r�pertoire des documents, et ils seront ainsi r�g�n�r�s � la 156 prochaine demande.</p> 157 </dd> 158 </dl> 159 160</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 161<div class="section"> 162<h2><a name="load-balancing" id="load-balancing">R�partition de charge</a></h2> 163 164 165 166 <dl> 167 <dt>Description :</dt> 168 169 <dd> 170 <p>Nous voulons r�partir la charge de mani�re al�atoire entre 171 plusieurs serveurs en utilisant mod_rewrite.</p> 172 </dd> 173 174 <dt>Solution :</dt> 175 176 <dd> 177 <p>Pour y parvenir, nous allons utiliser la directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> et une liste de 178 serveurs.</p> 179 180<pre class="prettyprint lang-config">RewriteEngine on 181RewriteMap lb rnd:/path/to/serverlist.txt 182RewriteRule ^/(.*) http://${lb:serveurs}/$1 [P,L]</pre> 183 184 185<p><code>liste-serveurs.txt</code> contiendra la liste des serveurs :</p> 186 187<div class="example"><p><code> 188## liste-serveurs.txt<br /> 189<br /> 190serveurs un.example.com|deux.example.com|trois.example.com<br /> 191</code></p></div> 192 193<p>Si vous voulez qu'un serveur se voit confier d'avantage de charge que 194les autres, faites le figurer plusieurs fois dans la liste.</p> 195 196 </dd> 197 198 <dt>Discussion</dt> 199 <dd> 200<p>Apache poss�de un module de r�partition de charge - 201<code class="module"><a href="/mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> - beaucoup plus souple et pr�sentant 202plus de fonctionnalit�s dans ce domaine que mod_rewrite.</p> 203 </dd> 204 </dl> 205 206</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 207<div class="section"> 208<h2><a name="autorefresh" id="autorefresh">Actualisation automatique d'un document</a></h2> 209 210 211 212 213 214 <dl> 215 <dt>Description :</dt> 216 217 <dd> 218 <p>Lorsque nous cr�ons une page web complexe, ne serait-il pas 219 souhaitable que le navigateur web actualise automatiquement la 220 page chaque fois que nous en sauvegardons une nouvelle version 221 � partir de notre �diteur ? Impossible ?</p> 222 </dd> 223 224 <dt>Solution :</dt> 225 226 <dd> 227 <p>Non ! Nous allons pour cela combiner la fonctionnalit� MIME 228 multipart, la fonctionnalit� NPH du serveur web et la 229 puissance de <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> pour la manipulation 230 d'URLs. Tout d'abord, nous d�finissons une nouvelle 231 fonctionnalit� pour les URLs : l'ajout de 232 <code>:refresh</code> � toute URL fait que la 'page' est 233 actualis�e chaque fois que la ressource est mise � jour dans 234 le syst�me de fichiers.</p> 235 236<pre class="prettyprint lang-config">RewriteRule ^(/[uge]/[^/]+/?.*):refresh /interne/cgi/apache/nph-refresh?f=$</pre> 237 238 239 <p>Nous appelons maintenant cette URL</p> 240 241<div class="example"><p><code> 242/u/foo/bar/page.html:refresh 243</code></p></div> 244 245 <p>ce qui entra�ne en interne l'invocation de l'URL</p> 246 247<div class="example"><p><code> 248/interne/cgi/apache/nph-refresh?f=/u/foo/bar/page.html 249</code></p></div> 250 251 <p>Il ne reste plus qu'� �crire le script NPH-CGI. Bien que l'on 252 �crive habituellement dans ces cas "laiss� � la charge du 253 lecteur � titre d'exercice", ;-) je vous l'offre, aussi.</p> 254 255<pre class="prettyprint lang-perl">#!/sw/bin/perl 256## 257## nph-refresh -- script NPH/CGI pour l'actualisation automatique de 258## pages 259## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved. 260## 261$| = 1; 262 263# �clate la variable QUERY_STRING 264@pairs = split( /&/, $ENV{'QUERY_STRING'} ); 265foreach $pair (@pairs) { 266 ( $name, $value ) = split( /=/, $pair ); 267 $name =~ tr/A-Z/a-z/; 268 $name = 'QS_' . $name; 269 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 270 eval "\$$name = \"$value\""; 271} 272$QS_s = 1 if ( $QS_s eq '' ); 273$QS_n = 3600 if ( $QS_n eq '' ); 274if ( $QS_f eq '' ) { 275 print "HTTP/1.0 200 OK\n"; 276 print "Content-type: text/html\n\n"; 277 print "<b>ERROR</b>: No file given\n"; 278 exit(0); 279} 280if ( !-f $QS_f ) { 281 print "HTTP/1.0 200 OK\n"; 282 print "Content-type: text/html\n\n"; 283 print "<b>ERROR</b>: File $QS_f not found\n"; 284 exit(0); 285} 286 287sub print_http_headers_multipart_begin { 288 print "HTTP/1.0 200 OK\n"; 289 $bound = "ThisRandomString12345"; 290 print "Content-type: multipart/x-mixed-replace;boundary=$bound\n"; 291 &print_http_headers_multipart_next; 292} 293 294sub print_http_headers_multipart_next { 295 print "\n--$bound\n"; 296} 297 298sub print_http_headers_multipart_end { 299 print "\n--$bound--\n"; 300} 301 302sub displayhtml { 303 local ($buffer) = @_; 304 $len = length($buffer); 305 print "Content-type: text/html\n"; 306 print "Content-length: $len\n\n"; 307 print $buffer; 308} 309 310sub readfile { 311 local ($file) = @_; 312 local ( *FP, $size, $buffer, $bytes ); 313 ( $x, $x, $x, $x, $x, $x, $x, $size ) = stat($file); 314 $size = sprintf( "%d", $size ); 315 open( FP, "<$file" ); 316 $bytes = sysread( FP, $buffer, $size ); 317 close(FP); 318 return $buffer; 319} 320 321$buffer = &readfile($QS_f); 322&print_http_headers_multipart_begin; 323&displayhtml($buffer); 324 325sub mystat { 326 local ($file) = $_[0]; 327 local ($time); 328 329 ( $x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime ) = stat($file); 330 return $mtime; 331} 332 333$mtimeL = &mystat($QS_f); 334$mtime = $mtime; 335for ( $n = 0 ; $n & lt ; $QS_n ; $n++ ) { 336 while (1) { 337 $mtime = &mystat($QS_f); 338 if ( $mtime ne $mtimeL ) { 339 $mtimeL = $mtime; 340 sleep(2); 341 $buffer = &readfile($QS_f); 342 &print_http_headers_multipart_next; 343 &displayhtml($buffer); 344 sleep(5); 345 $mtimeL = &mystat($QS_f); 346 last; 347 } 348 sleep($QS_s); 349 } 350} 351 352&print_http_headers_multipart_end; 353 354exit(0); 355 356##EOF##</pre> 357 358 </dd> 359 </dl> 360 361</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 362<div class="section"> 363<h2><a name="structuredhomedirs" id="structuredhomedirs">R�pertoires Home structur�s</a></h2> 364 365 366 367 <dl> 368 <dt>Description :</dt> 369 370 <dd> 371 <p>Certains sites avec des milliers d'utilisateurs organisent 372 les r�pertoires utilisateurs de mani�re structur�e, c'est � 373 dire que chaque r�pertoire utilisateur se trouve dans un 374 sous-r�pertoire dont le nom commence (par exemple) par le 375 premier caract�re du nom de l'utilisateur. Ainsi, 376 <code>/~larry/chemin</code> correspond � 377 <code>/home/<strong>l</strong>/larry/public_html/chemin</code>, alors 378 que <code>/~waldo/chemin</code> correspond � 379 <code>/home/<strong>w</strong>/waldo/public_html/chemin</code>.</p> 380 </dd> 381 382 <dt>Solution :</dt> 383 384 <dd> 385 <p>On utilise le jeu de r�gles suivant pour d�velopper les 386 URLs avec tilde selon l'organisation structur�e pr�c�dente.</p> 387 388<pre class="prettyprint lang-config">RewriteEngine on 389RewriteRule ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*) /home/<strong>$2</strong>/$1/public_html$3</pre> 390 391 </dd> 392 </dl> 393 394</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 395<div class="section"> 396<h2><a name="redirectanchors" id="redirectanchors">Redirection des ancrages</a></h2> 397 398 399 400 <dl> 401 <dt>Description :</dt> 402 403 <dd> 404 <p>Par d�faut, la redirection vers un ancrage HTML ne fonctionne 405 pas, car mod_rewrite �chappe le caract�re <code>#</code> en le 406 transformant en <code>%23</code>, ce qui rend la redirection 407 inop�rante.</p> 408 </dd> 409 410 <dt>Solution :</dt> 411 412 <dd> 413 <p>On utilise le drapeau <code>[NE]</code> dans la r�gle 414 <code>RewriteRule</code>. NE signifie "No Escape". 415 </p> 416 </dd> 417 418 <dt>Discussion :</dt> 419 <dd>Cette technique fonctionne bien entendu pour tout autre 420 caract�re sp�cial que mod_rewrite, par d�faut, code pour insertion 421 dans une URL.</dd> 422 </dl> 423 424</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 425<div class="section"> 426<h2><a name="time-dependent" id="time-dependent">R��criture d�pendant de l'heure</a></h2> 427 428 429 430 <dl> 431 <dt>Description :</dt> 432 433 <dd> 434 <p>Nous voulons servir des contenus diff�rents selon l'heure du 435 jour en utilisant mod_rewrite.</p> 436 </dd> 437 438 <dt>Solution :</dt> 439 440 <dd> 441 <p>Il existe de nombreuses variables nomm�es 442 <code>TIME_xxx</code> utilisables dans les conditions de 443 r��criture. Utilis�es en conjonction avec les mod�les de 444 comparaison lexicographique sp�ciaux <code><STRING</code>, 445 <code>>STRING</code> et <code>=STRING</code>, elles 446 permettent d'effectuer des redirections d�pendant de 447 l'heure :</p> 448 449<pre class="prettyprint lang-config">+RewriteEngine on 450+RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 451+RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 452+RewriteRule ^foo\.html$ foo.day.html [L]</pre> 453 454 455 <p>Avec cet exemple, l'URL <code>foo.html</code> renvoie 456 le contenu de <code>foo.jour.html</code> durant le 457 cr�neau horaire <code>07:01-18:59</code>, et le contenu de 458 <code>foo.nuit.html</code> le reste du temps.</p> 459 460 <div class="warning"><code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code>, les mandataires 461 interm�diaires et les navigateurs peuvent chacun mettre en cache 462 les r�ponses et ainsi afficher une des deux pages en dehors de 463 la fen�tre de temps configur�e. On peut utiliser 464 <code class="module"><a href="/mod/mod_expires.html">mod_expires</a></code> pour contourner ce probl�me. Il est 465 cependant bien plus commode de servir un contenu dynamique, et 466 de le personnaliser en fonction de l'heure du jour.</div> 467 </dd> 468 </dl> 469 470</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 471<div class="section"> 472<h2><a name="setenvvars" id="setenvvars">D�finir des variables d'environnement en fonction de 473 certaines parties de l'URL</a></h2> 474 475 476 477 <dl> 478 <dt>Description :</dt> 479 480 <dd> 481 <p>Ici, nous voulons conserver une certaine forme de statut 482 lorsqu'une r��criture a eu lieu. Par exemple, vous souhaitez 483 consigner le fait que cette r��criture a eu lieu, et vous servir 484 plus tard de cette information pour d�terminer si une requ�te sera 485 concern�e par cette r��criture. Pour y parvenir, on peut utiliser 486 une variable d'environnement.</p> 487 </dd> 488 489 <dt>Solution :</dt> 490 491 <dd> 492 <p>Utiliser le drapeau [E] pour d�finir une variable 493 d'environnement.</p> 494 495<pre class="prettyprint lang-config">RewriteEngine on 496RewriteRule ^/cheval/(.*) /poney/$1 [E=<strong>rewritten:1</strong>]</pre> 497 498 499 <p>Plus loin dans votre jeu de r�gles, vous pouvez v�rifier le 500 contenu de cette variable d'environnement via une directive 501 RewriteCond :</p> 502 503<pre class="prettyprint lang-config">RewriteCond %{ENV:rewritten} =1</pre> 504 505 506 </dd> 507 </dl> 508 509</div></div> 510<div class="bottomlang"> 511<p><span>Langues Disponibles: </span><a href="/en/rewrite/advanced.html" hreflang="en" rel="alternate" title="English"> en </a> | 512<a href="/fr/rewrite/advanced.html" title="Fran�ais"> fr </a></p> 513</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&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> 514<script type="text/javascript"><!--//--><![CDATA[//><!-- 515var comments_shortname = 'httpd'; 516var comments_identifier = 'http://httpd.apache.org/docs/2.4/rewrite/advanced.html'; 517(function(w, d) { 518 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 519 d.write('<div id="comments_thread"><\/div>'); 520 var s = d.createElement('script'); 521 s.type = 'text/javascript'; 522 s.async = true; 523 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 524 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 525 } 526 else { 527 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 528 } 529})(window, document); 530//--><!]]></script></div><div id="footer"> 531<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> 532<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[//><!-- 533if (typeof(prettyPrint) !== 'undefined') { 534 prettyPrint(); 535} 536//--><!]]></script> 537</body></html>