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>Redirection et remise en correspondance avec 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>Redirection et remise en correspondance avec mod_rewrite</h1> 23<div class="toplang"> 24<p><span>Langues Disponibles: </span><a href="/en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English"> en </a> | 25<a href="/fr/rewrite/remapping.html" title="Fran�ais"> fr </a></p> 26</div> 27 28 29<p>Ce document est un compl�ment � la <a href="/mod/mod_rewrite.html">Documentation de r�f�rence</a> de 30<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>. Il montre comment utiliser 31<code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> pour rediriger et remettre en 32correspondance une requ�te. Il contient de 33nombreux exemples d'utilisation courante de mod_rewrite avec une 34description d�taill�e de leur fonctionnement.</p> 35 36<div class="warning">Vous devez vous attacher � comprendre le 37fonctionnement des exemples, car la plupart d'entre eux ne 38fonctionneront pas sur votre syst�me si vous vous contentez de les 39copier/coller dans vos fichiers de configuration.</div> 40 41</div> 42<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#old-to-new">De l'ancienne � la nouvelle URL (en interne)</a></li> 43<li><img alt="" src="/images/down.gif" /> <a href="#old-to-new-extern">De l'ancien au nouveau (en externe)</a></li> 44<li><img alt="" src="/images/down.gif" /> <a href="#movehomedirs">Ressource d�plac�e vers un autre serveur</a></li> 45<li><img alt="" src="/images/down.gif" /> <a href="#static-to-dynamic">De statique � dynamique</a></li> 46<li><img alt="" src="/images/down.gif" /> <a href="#backward-compatibility">Compatibilit� ascendante dans le cadre d'une modification 47 d'extension de nom de fichier</a></li> 48<li><img alt="" src="/images/down.gif" /> <a href="#canonicalhost">Noms d'h�tes canoniques</a></li> 49<li><img alt="" src="/images/down.gif" /> <a href="#multipledirs">Recherche de pages dans plus d'un r�pertoire</a></li> 50<li><img alt="" src="/images/down.gif" /> <a href="#archive-access-multiplexer">Redirection vers des serveurs g�ographiquement distribu�s</a></li> 51<li><img alt="" src="/images/down.gif" /> <a href="#browser-dependent-content">Contenu d�pendant du navigateur</a></li> 52<li><img alt="" src="/images/down.gif" /> <a href="#canonicalurl">URLs canoniques</a></li> 53<li><img alt="" src="/images/down.gif" /> <a href="#moveddocroot">D�placement du r�pertoire <code>DocumentRoot</code></a></li> 54<li><img alt="" src="/images/down.gif" /> <a href="#fallback-resource">Ressource par d�faut</a></li> 55</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="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="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> 56<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 57<div class="section"> 58<h2><a name="old-to-new" id="old-to-new">De l'ancienne � la nouvelle URL (en interne)</a></h2> 59 60 61 62 <dl> 63 <dt>Description :</dt> 64 65 <dd> 66 <p>Supposons que nous ayons r�cemment renomm� la page 67 <code>foo.html</code> en <code>bar.html</code>, et voulions 68 maintenant que l'ancienne URL soit toujours valide � des fins 69 de compatibilit� ascendante. En fait, on voudrait que le 70 changement de nom soit transparent aux utilisateurs de 71 l'ancienne URL.</p> 72 </dd> 73 74 <dt>Solution :</dt> 75 76 <dd> 77 <p>On r��crit l'ancienne URL en interne vers la nouvelle via 78 la r�gle suivante :</p> 79 80<pre class="prettyprint lang-config">RewriteEngine on 81RewriteRule ^<strong>/foo</strong>\.html$ <strong>/bar</strong>.html [PT]</pre> 82 83 </dd> 84 </dl> 85 86</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 87<div class="section"> 88<h2><a name="old-to-new-extern" id="old-to-new-extern">De l'ancien au nouveau (en externe)</a></h2> 89 90 91 92 <dl> 93 <dt>Description :</dt> 94 95 <dd> 96 <p>Supposons toujours que nous ayons r�cemment renomm� la page 97 <code>foo.html</code> en <code>bar.html</code>, et voulions 98 maintenant que l'ancienne URL soit toujours valide � des fins 99 de compatibilit� ascendante. En revanche, nous voulons cette 100 fois que la nouvelle URL soit sugg�r�e aux utilisateurs de 101 l'ancienne URL, c'est � dire que l'adresse vue depuis leur 102 navigateur doit �galement �tre modifi�e.</p> 103 </dd> 104 105 <dt>Solution :</dt> 106 107 <dd> 108 <p>On force une redirection HTTP vers la nouvelle URL, ce qui 109 entra�ne une modification de celle du navigateur et aussi de ce 110 que voit l'utilisateur :</p> 111 112<pre class="prettyprint lang-config">RewriteEngine on 113RewriteRule ^<strong>foo</strong>\.html$ <strong>bar</strong>.html [<strong>R</strong>]</pre> 114 115</dd> 116 117<dt>Discussion</dt> 118 119 <dd> 120 <p>Dans l'exemple <a href="#old-to-new-intern">interne</a>, on a utilis� mod_rewrite afin 121 de dissimuler la redirection au client. Dans cet exemple, en 122 revanche, on aurait pu se contenter d'une directive Redirect :</p> 123 124 <pre class="prettyprint lang-config">Redirect /foo.html /bar.html</pre> 125 126 127 </dd> 128 </dl> 129 130</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 131<div class="section"> 132<h2><a name="movehomedirs" id="movehomedirs">Ressource d�plac�e vers un autre serveur</a></h2> 133 134 135 136 <dl> 137 <dt>Description :</dt> 138 139 <dd> 140 <p>Si une ressource a �t� d�plac�e vers un autre serveur, vous 141 pouvez faire en sorte que les URLs de l'ancien serveur continuent 142 de fonctionner pendant un certain temps, afin de laisser au 143 utilisateurs le temps de modifier leurs favoris.</p> 144 </dd> 145 146 <dt>Solution :</dt> 147 148 <dd> 149 <p>Vous pouvez utiliser <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> pour 150 rediriger ces URLs vers le nouveau serveur, mais vous pouvez aussi 151 utiliser les directives Redirect ou RedirectMatch.</p> 152 153<pre class="prettyprint lang-config">#Avec mod_rewrite 154RewriteEngine on 155RewriteRule ^/docs/(.+) http://nouveau.example.com/docs/$1 [R,L]</pre> 156 157 158<pre class="prettyprint lang-config">#Avec RedirectMatch 159RedirectMatch ^/docs/(.*) http://nouveau.example.com/docs/$1</pre> 160 161 162<pre class="prettyprint lang-config">#Avec Redirect 163Redirect /docs/ http://nouveau.example.com/docs/</pre> 164 165 </dd> 166 </dl> 167 168</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 169<div class="section"> 170<h2><a name="static-to-dynamic" id="static-to-dynamic">De statique � dynamique</a></h2> 171 172 173 174 <dl> 175 <dt>Description :</dt> 176 177 <dd> 178 <p>Comment transformer une page statique <code>foo.html</code> 179 en sa variante dynamique <code>foo.cgi</code> de mani�re 180 transparente, c'est � dire sans en avertir le 181 navigateur/utilisateur.</p> 182 </dd> 183 184 <dt>Solution :</dt> 185 186 <dd> 187 <p>On r��crit simplement l'URL en script CGI et force le 188 gestionnaire de contenu � <strong>cgi-script</strong> de fa�on 189 � ce que le script s'ex�cute en tant que programme CGI. 190 Ainsi, une requ�te vers <code>/~quux/foo.html</code> conduit 191 en interne � l'invocation de 192 <code>/~quux/foo.cgi</code>.</p> 193 194<pre class="prettyprint lang-config">RewriteEngine on 195RewriteBase /~quux/ 196RewriteRule ^foo\.html$ foo.cgi � [H=<strong>cgi-script</strong>]</pre> 197 198 </dd> 199 </dl> 200 201 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 202<div class="section"> 203<h2><a name="backward-compatibility" id="backward-compatibility">Compatibilit� ascendante dans le cadre d'une modification 204 d'extension de nom de fichier</a></h2> 205 206 207 208 <dl> 209 <dt>Description :</dt> 210 211 <dd> 212 <p>Comment conf�rer une compatibilit� ascendante aux URLs 213 (existant encore virtuellement) apr�s avoir migr� 214 <code>document.YYYY</code> vers <code>document.XXXX</code>, 215 c'est � dire apr�s avoir par exemple traduit un lot de 216 fichiers <code>.html</code> en fichiers <code>.php</code> 217 ?</p> 218 </dd> 219 220 <dt>Solution :</dt> 221 222 <dd> 223 <p>On r��crit simplement le nom du fichier en son nom 224 de base et v�rifie s'il existe aussi avec la nouvelle 225 extension. Si c'est le cas, on utilise ce nom, sinon on 226 r��crit l'URL sous sa forme originale.</p> 227 228 229<pre class="prettyprint lang-config"># jeu de r�gles assurant une compatibilit� ascendante en r��crivant<br /> 230# document.html en document.php si et seulement si document.php<br /> 231# existe 232<Directory /var/www/htdocs> 233 RewriteEngine on 234 RewriteBase /var/www/htdocs 235 236 RewriteCond $1.php -f 237 RewriteCond $1.html !-f 238 RewriteRule ^(.*).html$ $1.php 239</Directory></pre> 240 241 </dd> 242 243 <dt>Discussion</dt> 244 <dd> 245 <p>Cet exemple utilise une fonctionnalit� souvent m�connue de 246 mod_rewrite, en tirant avantage de l'ordre d'ex�cution du jeu de 247 r�gles. En particulier, mod_rewrite �value la partie gauche des 248 r�gles de r��criture avant d'�valuer les directives RewriteCond. En 249 cons�quence, $1 est d�j� d�fini au moment o� les directives 250 RewriteCond sont �valu�es. Ceci nous permet de tester l'existence du 251 fichier original (<code>document.html</code>) et du fichier cible 252 (<code>document.php</code>) en utilisant le m�me nom de base.</p> 253 254 <p>Ce jeu de r�gles est con�u pour une utilisation dans un contexte 255 de r�pertoire (au sein d'une section <Directory> ou d'un 256 fichier .htaccess), de fa�on � ce que les v�rifications 257 <code>-f</code> effectuent leurs recherches dans le bon r�pertoire. 258 Vous serez peut-�tre amen� � d�finir une directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritebase">RewriteBase</a></code> pour sp�cifier le 259 r�pertoire de base � partir duquel vous travaillez.</p> 260 </dd> 261 </dl> 262 263</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 264<div class="section"> 265<h2><a name="canonicalhost" id="canonicalhost">Noms d'h�tes canoniques</a></h2> 266 267 268 269 <dl> 270 <dt>Description :</dt> 271 272 <dd>Le but de cette r�gle est de pr�f�rer l'utilisation d'un nom 273 d'h�te particulier � d'autres noms d'h�te utilisables 274 pour atteindre le m�me site. Par exemple, si vous voulez 275 utiliser <strong>www.example.com</strong> � la place de 276 <strong>example.com</strong>, vous pouvez utiliser une solution 277 du style :</dd> 278 279 <dt>Solution :</dt> 280 281 <dd> 282 283<p>Pour y parvenir, il vaut mieux se passer de mod_rewrite, et utiliser 284plut�t la directive <code class="directive"><a href="/mod/mod_alias.html#redirect">Redirect</a></code> dans 285une section de serveur virtuel pour le/les noms d'h�te non canoniques.</p> 286 287<pre class="prettyprint lang-config"><VirtualHost *:80> 288 ServerName undesired.example.com 289 ServerAlias example.com notthis.example.com 290 291 Redirect / http://www.example.com/ 292</VirtualHost> 293 294<VirtualHost *:80> 295 ServerName www.example.com 296</VirtualHost></pre> 297 298 299<p>Vous pouvez aussi utiliser la directive <code class="directive"><a href="/mod/core.html#if"><If></a></code> :</p> 300 301<pre class="prettyprint lang-config"><If "%{HTTP_HOST} != 'www.example.com'"> 302 Redirect / http://www.example.com/ 303</If></pre> 304 305 306<p>Ou, par exemple, pour rediriger une portion de votre site vers HTTPS 307:</p> 308 309<pre class="prettyprint lang-config"><If "%{SERVER_PROTOCOL} != 'HTTPS'"> 310 Redirect /admin/ https://www.example.com/admin/ 311</If></pre> 312 313 314<p>Si, pour une raison particuli�re, vous voulez tout de m�me utiliser 315<code>mod_rewrite</code> - dans le cas, par exemple, o� vous avez besoin 316d'un jeu plus important de r�gles de r��critures - vous pouvez utiliser 317la recette suivante :</p> 318 319<p>Pour les sites �coutant sur un port autre que 80:</p> 320<pre class="prettyprint lang-config">RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 321RewriteCond %{HTTP_HOST} !^$ 322RewriteCond %{SERVER_PORT} !^80$ 323RewriteRule ^/?(.*) http://www.example.com:%{SERVER_PORT}/$1 [L,R,NE]</pre> 324 325 326<p>Et pour un site �coutant sur le port 80</p> 327<pre class="prettyprint lang-config">RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 328RewriteCond %{HTTP_HOST} !^$ 329RewriteRule ^/?(.*) http://www.example.com/$1 [L,R,NE]</pre> 330 331 <p> 332 Si vous souhaitez que cette r�gle s'applique � tous les noms de 333 domaine - en d'autres termes, si vous voulez rediriger 334 <strong>example.com</strong> vers 335 <strong>www.example.com</strong> pour toutes les valeurs 336 possibles de <strong>example.com</strong>, vous pouvez utiliser 337 le jeu de r�gles suivants :</p> 338 339<pre class="prettyprint lang-config">RewriteCond %{HTTP_HOST} !^www\. [NC] 340RewriteCond %{HTTP_HOST} !^$ 341RewriteRule ^/?(.*) http://www.%{HTTP_HOST}/$1 [L,R,NE]</pre> 342 343 <p> 344 Vous pouvez utiliser ce jeu de r�gles aussi bien dans le fichier 345 de configuration de votre serveur principal que dans un fichier 346 <code>.htaccess</code> plac� dans le r�pertoire d�fini par la 347 directive <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code> du serveur.</p> 348 </dd> 349 </dl> 350 351 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 352<div class="section"> 353<h2><a name="multipledirs" id="multipledirs">Recherche de pages dans plus d'un r�pertoire</a></h2> 354 355 356 357 <dl> 358 <dt>Description:</dt> 359 360 <dd> 361 <p>Une ressource peut exister dans plusieurs r�pertoires, et nous 362 voulons rechercher cette ressource dans ces r�pertoires 363 lorsqu'elle fait l'objet d'une requ�te. Il est possible que nous 364 ayons r�cemment r�organis� la structure de notre site en 365 r�partissant son contenu dans plusieurs r�pertoires.</p> 366 </dd> 367 368 <dt>Solution :</dt> 369 370 <dd> 371 <p>Le jeu de r�gles suivant recherche la ressource dans deux 372 r�pertoires, et s'il ne la trouve dans aucun des deux, il tentera 373 simplement de la servir � partir de l'adresse fournie dans la 374 requ�te.</p> 375 376<pre class="prettyprint lang-config">RewriteEngine on 377 378# on cherche tout d'abord dans dir1/... 379# ... et si on trouve, on est content et on arr�te : 380RewriteCond %{DOCUMENT_ROOT}/<strong>dir1</strong>/%{REQUEST_URI} -f 381RewriteRule ^(.+) %{DOCUMENT_ROOT}/<strong>dir1</strong>/$1 [L] 382 383# on cherche ensuite dans dir2/... 384# ... et si on trouve, on est content et on arr�te : 385RewriteCond %{DOCUMENT_ROOT}/<strong>dir2</strong>/%{REQUEST_URI} -f 386RewriteRule ^(.+) %{DOCUMENT_ROOT}/<strong>dir2</strong>/$1 [L] 387 388# sinon, on continue la recherche avec d'autres directives Alias 389# ou ScriptAlias, etc... 390RewriteRule ^ - [PT]</pre> 391 392 </dd> 393 </dl> 394 395 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 396<div class="section"> 397<h2><a name="archive-access-multiplexer" id="archive-access-multiplexer">Redirection vers des serveurs g�ographiquement distribu�s</a></h2> 398 399 400 401 <dl> 402 <dt>Description :</dt> 403 404 <dd> 405 <p>Notre site web poss�de de nombreux miroirs, et nous voulons 406 rediriger les utilisateurs vers celui qui se situe dans le pays o� 407 ils se trouvent. </p> 408 </dd> 409 410 <dt>Solution :</dt> 411 412 <dd> 413 <p>En consultant le nom d'h�te du client demandeur, on d�termine le 414 pays dans lequel il se trouve. S'il est impossible d'effectuer une 415 recherche sur leur adresse IP, on se rabat sur un serveur par 416 d�faut.</p> 417 <p>Nous allons utiliser une directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> afin de construire une 418 liste des serveurs que nous voulons utiliser.</p> 419 420<pre class="prettyprint lang-config">HostnameLookups on 421RewriteEngine on 422RewriteMap multiplex txt:/path/to/map.mirrors 423RewriteCond %{REMOTE_HOST} ([a-z]+)$ [NC] 424RewriteRule ^/(.*)$ ${multiplex:<strong>%1</strong>|http://www.example.com/}$1 [R,L]</pre> 425 426 427<div class="example"><p><code> 428## liste_miroirs -- Table de correspondance pays - serveurs<br /> 429<br /> 430de http://www.exemple.de/<br /> 431uk http://www.exemple.uk/<br /> 432com http://www.example.com/<br /> 433##EOF## 434</code></p></div> 435 </dd> 436 437 <dt>Discussion</dt> 438 <dd> 439 <div class="warning">Ce jeu de r�gles n�cessite la d�finition � 440 <code>on</code> de la directive <code class="directive"><a href="/mod/core.html#hostnamelookups">HostNameLookups</a></code>, ce qui peut induire une 441 baisse de performance significative.</div> 442 443 <p>La directive <code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> extrait la derni�re 444 partie du nom d'h�te du client demandeur - le code du pays - et la 445 r�gle de r��criture qui suit utilise cette valeur pour rechercher le 446 serveur miroir appropri� dans le fichier de correspondances.</p> 447 </dd> 448 </dl> 449 450</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 451<div class="section"> 452<h2><a name="browser-dependent-content" id="browser-dependent-content">Contenu d�pendant du navigateur</a></h2> 453 454 455 456 <dl> 457 <dt>Description :</dt> 458 459 <dd> 460 <p>Nous voulons fournir des contenus diff�rents en fonction du 461 navigateur (user-agent) qui effectue la requ�te.</p> 462 </dd> 463 464 <dt>Solution :</dt> 465 466 <dd> 467 <p>Nous devons d�terminer quel contenu servir, en nous basant 468 sur l'en-t�te HTTP "User-Agent". La 469 configuration suivante effectue ceci : si l'en-t�te HTTP 470 "User-Agent" commence par "Mozilla/3", le nom de la page 471 <code>foo.html</code> est r��crit en <code>foo.NS.html</code> 472 et la r��criture s'arr�te. Si le navigateur est "Lynx" ou 473 "Mozilla" version 1 ou 2, l'URL devient 474 <code>foo.20.html</code>. Tous les autres navigateurs 475 re�oivent la page <code>foo.32.html</code>. Tout ceci est 476 effectu� par le jeu de r�gles suivant :</p> 477<pre class="prettyprint lang-config">RewriteCond %{HTTP_USER_AGENT} ^<strong>Mozilla/3</strong>.* 478RewriteRule ^foo\.html$ foo.<strong>NS</strong>.html [<strong>L</strong>] 479 480RewriteCond %{HTTP_USER_AGENT} ^Lynx/ [OR] 481RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12] 482RewriteRule ^foo\.html$ foo.<strong>20</strong>.html [<strong>L</strong>] 483 484RewriteRule ^foo\.html$ foo.<strong>32</strong>.html [<strong>L</strong>]</pre> 485 486 </dd> 487 </dl> 488 489 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 490<div class="section"> 491<h2><a name="canonicalurl" id="canonicalurl">URLs canoniques</a></h2> 492 493 494 495<dl> 496 <dt>Description :</dt> 497 498 <dd> 499 <p>Sur certains serveurs, une ressource peut poss�der plusieurs 500 URLs. Il y a en g�n�ral les URLs canoniques (celles qui sont 501 r�ellement distribu�es et utilis�es), et celles qui correspondent � 502 des raccourcis, les URLs internes, etc... Quelle que soit l'adresse 503 que l'utilisateur fournit dans la requ�te, il devrait finalement 504 voir l'URL canonique dans la barre d'adresse de son navigateur.</p> 505 </dd> 506 507 <dt>Solution :</dt> 508 509 <dd> 510 <p>Nous effectuons une redirection HTTP externe pour toutes les 511 URLs non canoniques afin de les corriger dans la barre d'adresse 512 du navigateur, et ceci pour toutes les requ�tes futures. Dans le 513 jeu de r�gles suivant, nous rempla�ons <code>/matous</code> et 514 <code>/minettes</code> par le canonique <code>/chats</code>.</p> 515 516 <pre class="prettyprint lang-config">RewriteRule ^/(matous|minettes)/(.*) /chats/$2 [R]</pre> 517 518 </dd> 519 520 <dt>Discussion :</dt> 521 <dd>On serait mieux inspir� d'utiliser ici les directives Redirect ou 522 RedirectMatch : 523 524 <pre class="prettyprint lang-config">RedirectMatch ^/(matous|minettes)/(.*) /chats/$2</pre> 525 526 </dd> 527 </dl> 528 529</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 530<div class="section"> 531<h2><a name="moveddocroot" id="moveddocroot">D�placement du r�pertoire <code>DocumentRoot</code></a></h2> 532 533 534 535 <dl> 536 <dt>Description :</dt> 537 538 <dd> 539<p>En g�n�ral, le r�pertoire <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code> du serveur web correspond � l'URL 540"<code>/</code>". Ce r�pertoire ne contient cependant pas forc�ment des 541ressources de premi�re importance pour l'utilisateur. Par exemple, vous 542pr�f�rerez peut-�tre que le r�pertoire d'accueil d'un visiteur acc�dant 543pour la premi�re fois � votre site soit un r�pertoire particulier 544<code>/a-propos-de/</code>. Pour y parvenir, utilisez le jeu de r�gles 545suivant :</p> 546</dd> 547 548 <dt>Solution :</dt> 549 550 <dd> 551 <p>On redirige l'URL <code>/</code> vers 552 <code>/a-propos-de/</code> : 553 </p> 554 555<pre class="prettyprint lang-config">RewriteEngine on 556RewriteRule ^/$ /a-propos-de/ [<strong>R</strong>]</pre> 557 558 559<p>Notez que l'on peut aussi y parvenir en utilisant la directive 560<code class="directive"><a href="/mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> :</p> 561 562<pre class="prettyprint lang-config">RedirectMatch ^/$ 563http://example.com/a-propos-de/</pre> 564 565 566<p>Notez aussi que cet exemple ne r��crit que l'URL racine. En d'autres 567termes, il r��crit une requ�te pour <code>http://example.com/</code>, 568mais pas pour une requ�te <code>http://example.com/page.html</code>. Si 569vous avez effectivement modifi� la racine de vos documents - c'est � dire 570si <strong>tous</strong> vos contenus se trouvent dans un 571sous-r�pertoire, il est largement pr�f�rable de modifier simplement 572votre directive <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code>, ou de 573d�placer l'ensemble du contenu vers le r�pertoire sup�rieur, plut�t que 574de r��crire les URLs.</p> 575</dd> 576</dl> 577 578</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 579<div class="section"> 580<h2><a name="fallback-resource" id="fallback-resource">Ressource par d�faut</a></h2> 581 582 583<dl> 584<dt>Description :</dt> 585<dd>Vous voulez qu'une seule ressource (disons un certain fichier tel 586que index.php) soit servie pour toutes les requ�tes � destination d'un 587certain r�pertoire, sauf pour celles qui concernent une ressource 588existant effectivement comme une image, ou un fichier css.</dd> 589 590<dt>Solution :</dt> 591<dd> 592<p>Depuis la version 2.2.16, vous pouvez y parvenir via la directive 593<code class="directive"><a href="/mod/mod_dir.html#fallbackresource">FallbackResource</a></code> :</p> 594 595<pre class="prettyprint lang-config"><Directory /var/www/my_blog> 596 FallbackResource index.php 597</Directory></pre> 598 599 600<p>Cependant, si vos besoins �taient plus complexes, vous pouviez, dans 601les versions plus anciennes d'Apache, utiliser un jeu de r�gles du style 602:</p> 603 604<pre class="prettyprint lang-config"><Directory /var/www/my_blog> 605 RewriteBase /my_blog 606 607 RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-f 608 RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-d 609 RewriteRule ^ index.php [PT] 610</Directory></pre> 611 612 613<p>D'autre part, si vous voulez transmettre l'URI de la requ�te en tant 614que cha�ne de param�tres � index.php, vous pouvez remplacer cette r�gle 615de r��criture par :</p> 616 617<pre class="prettyprint lang-config">RewriteRule (.*) index.php?$1 [PT,QSA]</pre> 618 619 620<p>Notez que l'on peut utiliser ces jeux de r�gles aussi bien dans un 621fichier <code>.htaccess</code> que dans une section 622<Directory>.</p> 623 624</dd> 625 626</dl> 627 628</div></div> 629<div class="bottomlang"> 630<p><span>Langues Disponibles: </span><a href="/en/rewrite/remapping.html" hreflang="en" rel="alternate" title="English"> en </a> | 631<a href="/fr/rewrite/remapping.html" title="Fran�ais"> fr </a></p> 632</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> 633<script type="text/javascript"><!--//--><![CDATA[//><!-- 634var comments_shortname = 'httpd'; 635var comments_identifier = 'http://httpd.apache.org/docs/2.4/rewrite/remapping.html'; 636(function(w, d) { 637 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 638 d.write('<div id="comments_thread"><\/div>'); 639 var s = d.createElement('script'); 640 s.type = 'text/javascript'; 641 s.async = true; 642 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 643 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 644 } 645 else { 646 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 647 } 648})(window, document); 649//--><!]]></script></div><div id="footer"> 650<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> 651<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[//><!-- 652if (typeof(prettyPrint) !== 'undefined') { 653 prettyPrint(); 654} 655//--><!]]></script> 656</body></html>