| <!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>Quand ne pas utiliser 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>Quand ne pas utiliser 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/avoid.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/avoid.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/avoid.html" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/avoid.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/avoid.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/avoid.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/avoid.html" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> | |
| </div> | |
| <div class="outofdate">Cette traduction peut être périmée. Vérifiez la version | |
| anglaise pour les changements récents.</div> | |
| <p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">Documentation de référence</a> de | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Il décrit peut-être un des concepts les | |
| plus importants à propos de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> - à savoir, quand doit-on éviter | |
| de l'utiliser.</p> | |
| <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> doit être considéré comme un dernier recours, | |
| lorsqu'aucune alternative n'est possible. Utiliser mod_rewrite lorsqu'il | |
| existe des alternatives plus simples conduit à des configurations | |
| confuses, fragiles, et difficiles à maintenir. La compréhension des | |
| autres alternatives disponibles est une étape très importante sur le | |
| chemin de la maîtrise de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> | |
| <p>Vous devez vous attacher à comprendre le | |
| fonctionnement des exemples, car la plupart d'entre eux ne | |
| fonctionneront pas sur votre système si vous vous contentez de les | |
| copier/coller dans vos fichiers de configuration.</p> | |
| <p>Le cas le plus courant dans lequel <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est | |
| l'outil approprié est la situation où la seule solution envisageable | |
| nécessite l'accès aux fichiers de configuration du serveur, alors que | |
| cet accès ne vous est pas accordé. Certaines directives de configuration | |
| ne sont disponibles que dans le fichier de configuration du serveur. Si | |
| vous ne pouvez agir que sur les fichiers .htaccess, vous devrez donc | |
| vous tourner vers <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> | |
| </div> | |
| <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#redirect">Redirection simple</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#alias">Alias d'URL</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#proxy">Mandat simple</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#setenv">Test de variables d'environnement</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#fallback-resource">Contrôleur frontal / Routage des | |
| ressources</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#ifexpr">Configuration conditionnelle avec des | |
| expressions rationnelles</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#blocked-inline-images">Blocage du référencement à chaud (Hotlinking) d'images</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#blocking-of-robots">Blocage des robots</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#host-deny">Interdire des hôtes dans une liste de rejets</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#vhosts">Serveurs virtuels</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#load-balancing">Répartition de charge</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="htaccess.html">Réécritures par répertoire</a></li><li><a href="flags.html">Drapeaux de RewriteRule</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="rewritemap.html">Utilisation de RewriteMap</a></li><li><a href="tech.html">Détails techniques</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="redirect">Redirection simple <a title="Lien permanent" href="#redirect" class="permalink">¶</a></h2> | |
| <p><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> fournit les directives <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> et <code class="directive"><a href="../mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> qui permettent de | |
| rediriger une URL vers une autre. Plutôt que d'utiliser la directive | |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> pour ce genre de | |
| redirection simple d'une URL ou d'une classe d'URLs vers une autre, on | |
| préfèrera l'utilisation de ces directives. En outre, avec | |
| <code>RedirectMatch</code>, vous pouvez inclure une expression | |
| rationnelle dans votre critère de redirection, ce qui vous permet de | |
| bénéficier de nombreux avantages de la directive | |
| <code>RewriteRule</code>.</p> | |
| <p>Une utilisation courante de la directive <code>RewriteRule</code> est | |
| la redirection de toute une classe d'URLs. Par exemple, toutes les URLs | |
| faisant référence au répertoire <code>/un</code> doivent être | |
| redirigées vers <code>http://un.example.com/</code>, ou toutes les | |
| requêtes <code>http</code> doivent être redirigées vers | |
| <code>https</code>.</p> | |
| <p>Pour ce faire, il est préférable d'utiliser la directive | |
| <code>Redirect</code>. Souvenez-vous que la directive | |
| <code>Redirect</code> conserve les informations relatives au chemin. En | |
| d'autres termes, la redirection d'une URL <code>/un</code> va aussi | |
| rediriger toutes les URLs de niveaux inférieurs comme | |
| <code>/un/deux.html</code> et <code>/un/trois/quatre.html</code>.</p> | |
| <p>Pour rediriger les URLs sous <code>/un</code> vers | |
| <code>http://un.example.com/</code>, utilisez cette définition :</p> | |
| <pre class="prettyprint lang-config">Redirect "/one/" "http://one.example.com/"</pre> | |
| <p>Pour rediriger un nom d'hôte vers un autre nom d'hôte, par exemple | |
| <code>example.com</code> vers <code>www.example.com</code>, voir la | |
| méthode <a href="remapping.html#canonicalhost">Noms d'hôtes canoniques</a>.</p> | |
| <p>Pour rediriger les URLs <code>http</code> vers <code>https</code>, une | |
| directive <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> dans un serveur | |
| virtuel HTTP dédié est l’approche la plus propre. Voir la recette <a href="remapping.html#https-redirect">Forcer HTTPS</a> pour la configuration | |
| recommandée et l’alternative de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour l’utilisation | |
| des fichiers <code>.htaccess</code>.</p> | |
| <div class="note"><h3>Ordre de traitement</h3> | |
| <p>Si vous mélangez des directives <code class="directive"><a href="../mod/mod_alias.html#redirect">Redirect</a></code> et <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans le même contexte, sachez | |
| que leur ordre d’exécution dépend de l’emplacement où elles apparaissent. | |
| Dans un contexte de serveur virtuel ou global, c’est | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> qui agit en premier, alors que dans un contexte | |
| de répertoire (fichiers <code>.htaccess</code>), c’est | |
| <code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code>. Voir <a href="tech.html#order">Ordre de | |
| traitement des modules</a> pour les détails.</p> | |
| </div> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="alias">Alias d'URL <a title="Lien permanent" href="#alias" class="permalink">¶</a></h2> | |
| <p>La directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> permet de mettre | |
| en correspondance un chemin d’URL avec un répertoire, ce dernier étant en | |
| général situé en dehors de l'arborescence définie par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. Bien qu'il soit possible d'effectuer | |
| cette mise en correspondance avec <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, il est | |
| préférable d'utiliser la directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> pour des raisons de simplicité et de | |
| performances.</p> | |
| <div class="example"><h3>Utilisation de la directive Alias</h3><pre class="prettyprint lang-config">Alias "/cats" "/var/www/virtualhosts/felines/htdocs"</pre> | |
| </div> | |
| <p> | |
| Pour effectuer cette mise en correspondance, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> | |
| s'impose si vous n'avez pas accès aux fichiers de configuration du | |
| serveur. En effet, la directive Alias ne peut pas être utilisée dans un | |
| fichier <code>.htaccess</code>, mais seulement dans un contexte de | |
| serveur principal ou de serveur virtuel. | |
| </p> | |
| <p>En outre, vous pouvez arriver au même résultat avec les liens | |
| symboliques, pourvu que <code>Options FollowSymLinks</code> soit activé | |
| sur votre serveur.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="proxy">Mandat simple <a title="Lien permanent" href="#proxy" class="permalink">¶</a></h2> | |
| <p>La directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> fournit | |
| le drapeau <a href="flags.html#flag_p">[P]</a> qui permet de faire passer les URIs | |
| réécrits par <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>.</p> | |
| <pre class="prettyprint lang-config">RewriteRule "^/?images(.*)" "http://serveur-images.local/images$1" [P]</pre> | |
| <p>Cependant, dans les nombreux cas où aucune correspondance au modèle | |
| n'est vraiment nécessaire, comme dans l'exemple ci-dessus, il est | |
| préférable d'utiliser la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. L'exemple précédent pourrait | |
| être remplacé par :</p> | |
| <pre class="prettyprint lang-config">ProxyPass "/images/" "http://serveur-images.local/images/"</pre> | |
| <p>Que vous utilisiez <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ou <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>, vous devrez dans tous les cas | |
| utiliser aussi la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> pour intercepter les | |
| redirections en provenance du serveur d'arrière-plan :</p> | |
| <pre class="prettyprint lang-config">ProxyPassReverse "/images/" "http://serveur-images.local/images/"</pre> | |
| <p>Vous devrez cependant tout de même utiliser <code>RewriteRule</code> | |
| lorsque d'autres <code>RewriteRule</code>s se trouvent dans la même portée, | |
| car elles agissent en général avant les directives | |
| <code>ProxyPass</code>, et peuvent ainsi les court-circuiter.</p> | |
| <p><code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> s’avère vraiment | |
| utile pour ne mandater les requêtes que si le contenu n’existe pas localement | |
| — par exemple, lors de la migration d’un serveur vers un autre :</p> | |
| <pre class="prettyprint lang-config">RewriteCond "%{REQUEST_FILENAME}" !-f | |
| RewriteCond "%{REQUEST_FILENAME}" !-d | |
| RewriteRule "^/(.*)" "http://old.example.com/$1" [P] | |
| ProxyPassReverse "/" "http://old.example.com/"</pre> | |
| <p>Dans cet exemple, les requêtes pour des ressources qui n’ont pas encore été | |
| migrées sont mandatées silencieusement vers l’ancien serveur. Lors de la | |
| migration du contenu, les fichiers locaux ont la priorité. N’oubliez pas de | |
| toujours inclure une directive <code class="directive"><a href="../mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> pour être sûr que toute | |
| redirection effectuée par le serveur dorsal est correctement transmise au | |
| client.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="setenv">Test de variables d'environnement <a title="Lien permanent" href="#setenv" class="permalink">¶</a></h2> | |
| <p><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est souvent utilisé pour effectuer une | |
| action en fonction de la présence ou de l'absence d'une variable | |
| d'environnement particulière ou d'un en-tête de requête, ce qui peut | |
| être accompli de manière plus efficace via la directive <code class="directive"><a href="../mod/core.html#if"><If></a></code>.</p> | |
| <p>Considérons par exemple le scénario courant où la directive | |
| <code class="directive">RewriteRule</code> est utilisée pour forcer un nom | |
| d'hôte canonique, tel que <code>www.example.com</code> au lieu de | |
| <code>example.com</code>. Il est possible d'utiliser à la place la | |
| directive <code class="directive"><a href="../mod/core.html#if"><If></a></code> comme | |
| suit :</p> | |
| <pre class="prettyprint lang-config"><If "req('Host') != 'www.example.com'"> | |
| Redirect "/" "http://www.example.com/" | |
| </If></pre> | |
| <p>On peut utiliser cette technique dans de nombreux scénarios courant | |
| pour remplacer <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour effectuer des actions | |
| en fonction d'en-têtes de requêtes ou de réponses, ou de variables | |
| d'environnement.</p> | |
| <p>Voir en particulier la <a href="../expr.html">documentation sur | |
| l'évaluation des expressions</a> pour une vue d'ensemble des types | |
| d'expressions que vous pouvez utiliser dans les sections <code class="directive"><a href="../mod/core.html#if"><If></a></code>, | |
| ainsi que dans certaines directives.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="fallback-resource">Contrôleur frontal / Routage des | |
| ressources <a title="Lien permanent" href="#fallback-resource" class="permalink">¶</a></h2> | |
| <p>Une utilisation très courante de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> consiste à | |
| router toutes les requêtes pour des ressources non existantes vers un seul | |
| script de contrôle frontal (par exemple <code>index.php</code>). Il s’agit de la | |
| base du routage dans le cadre de la plus grande partie du web moderne.</p> | |
| <p>L’approche typique avec <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> est :</p> | |
| <pre class="prettyprint lang-config">RewriteEngine On | |
| RewriteCond "%{REQUEST_FILENAME}" !-f | |
| RewriteCond "%{REQUEST_FILENAME}" !-d | |
| RewriteRule "^(.*)$" "/index.php" [L]</pre> | |
| <p>Cette opération peut être effectuée beaucoup plus simplement avec la | |
| directive <code class="directive"><a href="../mod/mod_dir.html#fallbackresource">FallbackResource</a></code> :</p> | |
| <pre class="prettyprint lang-config">FallbackResource /index.php</pre> | |
| <p>La directive <code class="directive"><a href="../mod/mod_dir.html#fallbackresource">FallbackResource</a></code> fait la | |
| même chose — les requêtes pour des fichiers et répertoires existants sont | |
| traitées normalement, toutes les autres étant routées vers la ressource | |
| spécifiée — mais sans la surcharge de travail et la complexité du moteur de | |
| réécriture. Elle fonctionne dans les deux contextes de configuration globale du | |
| serveur et des fichiers <code>.htaccess</code>.</p> | |
| <p>Pour désactiver une <code>FallbackResource</code> définie dans un répertoire | |
| parent :</p> | |
| <pre class="prettyprint lang-config">FallbackResource disabled</pre> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="ifexpr">Configuration conditionnelle avec des | |
| expressions rationnelles <a title="Lien permanent" href="#ifexpr" class="permalink">¶</a></h2> | |
| <p>Dans de nombreux cas, l’utilisation de <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> peut être remplacée par la | |
| directive <code class="directive"><a href="../mod/core.html#if"><If></a></code> qui prend en | |
| charge une <a href="../expr.html">syntaxe des expressions</a> riche et s’intègre | |
| parfaitement avec les autres directives de httpd.</p> | |
| <p>Redirection basée sur un élément de la chaîne de paramètres :</p> | |
| <pre class="prettyprint lang-config"><If "%{QUERY_STRING} =~ /lang=fr/"> | |
| Redirect "/welcome" "/bienvenue" | |
| </If></pre> | |
| <p>Restriction d’accès en fonction de la méthode de la requête :</p> | |
| <pre class="prettyprint lang-config"><If "%{REQUEST_METHOD} IN {'DELETE', 'PUT', 'PATCH'}"> | |
| Require ip 10.0.0.0/8 | |
| </If></pre> | |
| <p>Blocage des requêtes qui ne comportent pas d’en-tête Host (clients | |
| HTTP/1.0) :</p> | |
| <pre class="prettyprint lang-config"><If "-z req('Host')"> | |
| Require all denied | |
| </If></pre> | |
| <p>Voir la <a href="../expr.html">documentation sur l’évaluation des | |
| expressions</a> pour une description complète de la syntaxe disponible dans les | |
| blocs <code class="directive"><a href="../mod/core.html#if"><If></a></code>.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="blocked-inline-images">Blocage du référencement à chaud (Hotlinking) d'images <a title="Lien permanent" href="#blocked-inline-images" class="permalink">¶</a></h2> | |
| <dl> | |
| <dt>Description :</dt> | |
| <dd> | |
| <p>Le référencement à chaud consiste pour les autres sites à inclure | |
| directement vos images dans leurs pages en utilisant votre bande | |
| passante pour servir des contenus pour le site de quelqu'un d'autre. | |
| Vous pouvez empêcher cela sans utiliser | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> | |
| </dd> | |
| <dt>Solution :</dt> | |
| <dd> | |
| <p>Utilisez la directive <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> avec la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> :</p> | |
| <pre class="prettyprint lang-config">SetEnvIf Referer example\.com localreferer | |
| <FilesMatch "\.(jpg|png|gif)$"> | |
| Require env localreferer | |
| </FilesMatch></pre> | |
| </dd> | |
| <dt>Discussion :</dt> | |
| <dd> | |
| <p>Si vous avez besoin d’une logique plus complexe — comme servir une | |
| autre image aux référenceurs à chaud au lieu de rejeter la requête — vous | |
| aurez peut-être besoin de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Les exemples | |
| suivants s’appuient sur l’en-tête <code>HTTP_REFERER</code> qui est | |
| facultatif et peut être usurpé. La condition <code>!^$</code> autorise les | |
| requêtes qui ne comportent aucun en-tête Referer, de sorte que les | |
| utilisateurs qui saisissent l’URL directement, ou dont les navigateurs | |
| suppriment cet en-tête ne soient pas bloqués.</p> | |
| <p>Rejeter purement et simplement la requête :</p> | |
| <pre class="prettyprint lang-config">RewriteCond "%{HTTP_REFERER}" "!^$" | |
| RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC] | |
| RewriteRule "\.(gif|jpg|png)$" "-" [F,NC]</pre> | |
| <p>Servir une image alternative :</p> | |
| <pre class="prettyprint lang-config">RewriteCond "%{HTTP_REFERER}" "!^$" | |
| RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC] | |
| RewriteRule "\.(gif|jpg|png)$" "/images/go-away.png" [R,NC]</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="blocking-of-robots">Blocage des robots <a title="Lien permanent" href="#blocking-of-robots" class="permalink">¶</a></h2> | |
| <dl> | |
| <dt>Description :</dt> | |
| <dd> | |
| <p>Vous voulez bloquer les requêtes persistantes d’un robot particulier ou | |
| d’un agent utilisateur qui ignore votre <code>/robots.txt</code>.</p> | |
| </dd> | |
| <dt>Solution :</dt> | |
| <dd> | |
| <p>Utilisez la directive <code class="directive"><a href="../mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code> avec la directive | |
| <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> :</p> | |
| <pre class="prettyprint lang-config">SetEnvIfNoCase User-Agent ^NameOfBadRobot goaway | |
| <Location "/secret/files"> | |
| <RequireAll> | |
| Require all granted | |
| Require not env goaway | |
| </RequireAll> | |
| </Location></pre> | |
| </dd> | |
| <dt>Discussion :</dt> | |
| <dd> | |
| <p>Toute technique qui s’appuie sur la chaîne <code>USER_AGENT</code> peut | |
| être facilement contournée, car cette chaîne peut être modifiée par le | |
| client. Si vous subissez une attaque soutenue, vous devez la traiter à un | |
| niveau supérieur, par exemple au niveau de votre pare-feu.</p> | |
| <p>Si vous devez combiner la recherche de correspondance par agent | |
| utilisateur et par adresse IP, <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> peut être | |
| utilisé en remplacement :</p> | |
| <pre class="prettyprint lang-config">RewriteCond "%{HTTP_USER_AGENT}" "^NameOfBadRobot" | |
| RewriteCond "%{REMOTE_ADDR}" "=123\.45\.67\.[8-9]" | |
| RewriteRule "^/secret/files/" "-" [F]</pre> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="host-deny">Interdire des hôtes dans une liste de rejets <a title="Lien permanent" href="#host-deny" class="permalink">¶</a></h2> | |
| <dl> | |
| <dt>Description :</dt> | |
| <dd> | |
| <p>Nous souhaitons établir une liste des hôtes auxquels nous voulons | |
| interdire l’accès à notre serveur.</p> | |
| </dd> | |
| <dt>Solution :</dt> | |
| <dd> | |
| <p>Pour un simple blocage basé sur l’adresse IP, utilisez la directive | |
| <code class="directive"><a href="../mod/mod_authz_host.html#require">Require</a></code> directement :</p> | |
| <pre class="prettyprint lang-config"><Location "/"> | |
| <RequireAll> | |
| Require all granted | |
| Require not ip 193.102.180.41 | |
| Require not ip 192.76.162.40 | |
| </RequireAll> | |
| </Location></pre> | |
| </dd> | |
| <dt>Discussion :</dt> | |
| <dd> | |
| <p>Si vous avez besoin d’une liste d’interdiction dynamique basée sur un | |
| fichier (plutôt que d’énumérer des adresses IP dans la configuration), | |
| vous pouvez utiliser <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> et sa directive | |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> :</p> | |
| <pre class="prettyprint lang-config">RewriteEngine on | |
| RewriteMap hosts-deny "txt:/path/to/hosts.deny" | |
| RewriteCond "${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}" "!=NOT-FOUND" [OR] | |
| RewriteCond "${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}" "!=NOT-FOUND" | |
| RewriteRule "^" "-" [F]</pre> | |
| <p>Le fichier de mappage contient une entrée par ligne, avec une adresse | |
| IP ou un nom d’hôte comme clé et une valeur factice (parce que la | |
| directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> requiert | |
| des paires clé/valeur) :</p> | |
| <div class="example"><p><code> | |
| ## hosts.deny<br> | |
| 193.102.180.41 -<br> | |
| 192.76.162.40 -<br> | |
| </code></p></div> | |
| <p>La seconde directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> présuppose que | |
| <code>HostnameLookups</code> est activé. Dans le cas contraire, | |
| supprimer-la, ainsi que le drapeau <code>[OR]</code> de la première | |
| condition.</p> | |
| </dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="vhosts">Serveurs virtuels <a title="Lien permanent" href="#vhosts" class="permalink">¶</a></h2> | |
| <p>Bien qu’il soit possible de gérer les <a href="vhosts.html">serveurs virtuels | |
| avec mod_rewrite</a>, il s’agit rarement de la bonne méthode. Le bon choix | |
| consiste pratiquement toujours à créer des blocs <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> individuels. Si vous devez gérer un très | |
| grand nombre de serveurs virtuels, choisissez plutôt d’utiliser | |
| <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> pour créer ces hôtes automatiquement.</p> | |
| <p>Des modules tels que <code class="module"><a href="../mod/mod_macro.html">mod_macro</a></code> permettent aussi de créer un | |
| grand nombre de serveurs virtuels dynamiquement.</p> | |
| <p>Utiliser <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour la création de serveurs virtuels | |
| peut convenir si vous utilisez un service d’hébergement qui ne vous permet pas | |
| d’accéder aux fichiers de configuration du serveur, et que vous soyez par | |
| conséquent contraint d’utiliser des fichiers <code>.htaccess</code>.</p> | |
| <p>Voir le document <a href="vhosts.html">les serveurs virtuels avec | |
| mod_rewrite</a> pour plus de détails sur la manière de procéder si cette | |
| approche vous semble encore être la bonne.</p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="load-balancing">Répartition de charge <a title="Lien permanent" href="#load-balancing" class="permalink">¶</a></h2> | |
| <dl> | |
| <dt>Description :</dt> | |
| <dd> | |
| <p>Nous souhaitons répartir la charge entre plusieurs serveurs dorsaux.</p> | |
| </dd> | |
| <dt>Solution :</dt> | |
| <dd> | |
| <p>Utilisez le module <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> qui fournit une | |
| solution de répartition de charge flexible et totalement fonctionnelle. Il | |
| prend en charge plusieurs algorithmes de répartition, la persistance de | |
| session, les contrôles de bon fonctionnement et une configuration | |
| dynamique avec le gestionnaire de répartition de charge (Balancer Manager) | |
| — toutes choses impossibles avec l’approche de | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> | |
| <pre class="prettyprint lang-config"><Proxy "balancer://mycluster"> | |
| BalancerMember "http://one.example.com" | |
| BalancerMember "http://two.example.com" | |
| BalancerMember "http://three.example.com" | |
| </Proxy> | |
| ProxyPass "/" "balancer://mycluster/" | |
| ProxyPassReverse "/" "balancer://mycluster/"</pre> | |
| </dd> | |
| <dt>Discussion :</dt> | |
| <dd> | |
| <p>Il est possible de mettre en Ĺ“uvre une répartition de charge aléatoire | |
| rudimentaire en utilisant <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> et une directive | |
| <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> de type | |
| <code>rnd</code> :</p> | |
| <pre class="prettyprint lang-config">RewriteEngine on | |
| RewriteMap lb "rnd:/path/to/serverlist.txt" | |
| RewriteRule "^/(.*)" "http://${lb:servers}/$1" [P,L]</pre> | |
| <p><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> est cependant beaucoup plus flexible et | |
| fonctionnel que tout ce que vous pourrez « bricoler » en utilisant | |
| <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, et correspond à l’approche recommandée.</p> | |
| </dd> | |
| </dl> | |
| </div></div> | |
| <div class="bottomlang"> | |
| <p><span>Langues Disponibles: </span><a href="../de/rewrite/avoid.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> | | |
| <a href="../en/rewrite/avoid.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../es/rewrite/avoid.html" hreflang="es" rel="alternate" title="Español"> es </a> | | |
| <a href="../fr/rewrite/avoid.html" title="Français"> fr </a> | | |
| <a href="../ja/rewrite/avoid.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | | |
| <a href="../ko/rewrite/avoid.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/rewrite/avoid.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a> | | |
| <a href="../zh-cn/rewrite/avoid.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> |