summaryrefslogtreecommitdiffstats
path: root/docs/manual/mod/mod_rewrite.xml.fr
diff options
context:
space:
mode:
authorLucien Gentis <lgentis@apache.org>2010-11-07 18:21:41 +0100
committerLucien Gentis <lgentis@apache.org>2010-11-07 18:21:41 +0100
commit909c5157e7cc9ac293531ac3c2eed871b548ba10 (patch)
tree3216d8a30814d02f055227469eacd479c896ebdb /docs/manual/mod/mod_rewrite.xml.fr
parentlog how long worker will be disabled (diff)
downloadapache2-909c5157e7cc9ac293531ac3c2eed871b548ba10.tar.xz
apache2-909c5157e7cc9ac293531ac3c2eed871b548ba10.zip
Updates.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1032317 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'docs/manual/mod/mod_rewrite.xml.fr')
-rw-r--r--docs/manual/mod/mod_rewrite.xml.fr1780
1 files changed, 684 insertions, 1096 deletions
diff --git a/docs/manual/mod/mod_rewrite.xml.fr b/docs/manual/mod/mod_rewrite.xml.fr
index 54d6d5f626..55dcd851dd 100644
--- a/docs/manual/mod/mod_rewrite.xml.fr
+++ b/docs/manual/mod/mod_rewrite.xml.fr
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 729539 -->
+<!-- English Revision : 1029689 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
@@ -33,29 +33,28 @@ r&egrave;gles permettant de r&eacute;&eacute;crire les URLs des requ&ecirc;tes
<status>Extension</status>
<sourcefile>mod_rewrite.c</sourcefile>
<identifier>rewrite_module</identifier>
-<compatibility>Disponible &agrave; partir de la version 1.3
-d'Apache</compatibility>
<summary>
- <p>Ce module utilise un moteur de r&eacute;&eacute;criture &agrave; base de r&egrave;gles
- (bas&eacute; sur un interpr&eacute;teur d'expressions rationnelles) pour
- r&eacute;&eacute;crire les URLs des requ&ecirc;tes &agrave; la vol&eacute;e. Il accepte un nombre
- illimit&eacute; de r&egrave;gles, ainsi q'un nombre illimit&eacute; de conditions
- attach&eacute;es &agrave; chaque r&egrave;gle, fournissant ainsi un m&eacute;canisme de
- manipulation d'URL vraiment souple et puissant. Les manipulations
- d'URL peuvent d&eacute;pendre de nombreux tests, des variables du
- serveur, des variables d'environnement, des en-t&ecirc;tes HTTP ou de
- l'horodatage. On peut m&ecirc;me lancer des requ&ecirc;tes vers une base de
- donn&eacute;es externe sous divers formats, afin d'obtenir une
- s&eacute;lection d'URL tr&egrave;s fine.</p>
-
- <p>Ce module agit sur l'ensemble de l'URL (la partie concernant
- le chemin incluse) au niveau du serveur
- (<code>httpd.conf</code>) mais aussi au niveau du r&eacute;pertoire
- (<code>.htaccess</code>), et peut inclure des arguments de cha&icirc;ne
- de requ&ecirc;te (query string) comme r&eacute;sultat. Le r&eacute;sultat de la r&eacute;&eacute;criture peut
- renvoyer vers un sous-traitement interne, une redirection vers
- une requ&ecirc;te externe, ou m&ecirc;me vers le flux d'un proxy interne.</p>
+ <p>Le module <module>mod_rewrite</module> utilise un moteur de
+ r&eacute;&eacute;criture &agrave; base de r&egrave;gles, bas&eacute; sur un interpr&eacute;teur
+ d'expressions rationnelles, pour r&eacute;&eacute;crire les URLs &agrave; la vol&eacute;e. Par
+ d&eacute;faut, <module>mod_rewrite</module> met en correspondance une URL
+ avec le syst&egrave;me de fichiers. Cependant, on peut aussi l'utiliser
+ pour rediriger une URL vers une autre URL, ou pour invoquer une
+ requ&ecirc;te interne &agrave; destination du mandataire.</p>
+ <p><module>mod_rewrite</module> fournit une m&eacute;thode souple et
+ puissante pour manipuler les URLs en utilisant un nombre illimit&eacute;
+ de r&egrave;gles. Chaque r&egrave;gle peut &ecirc;tre associ&eacute;e &agrave; un nombre illimit&eacute; de
+ conditions, afin de vous permettre de r&eacute;&eacute;crire les URLs en
+ fonction de variables du serveur, de variables d'environnement,
+ d'en-t&ecirc;tes HTTP, ou de rep&egrave;res temporels.</p>
+ <p><module>mod_rewrite</module> agit sur la totalit&eacute; de l'URL, y
+ compris la partie chemin. Une r&egrave;gle de r&eacute;&eacute;criture peut &ecirc;tre
+ invoqu&eacute;e dans <code>httpd.conf</code> ou dans un fichier
+ <code>.htaccess</code>. Le chemin g&eacute;n&eacute;r&eacute; par une r&egrave;gle de
+ r&eacute;&eacute;criture peut inclure une cha&icirc;ne de param&egrave;tres, ou peut renvoyer
+ vers un traitement secondaire interne, une redirection vers une
+ requ&ecirc;te externe ou vers le mandataire interne.</p>
<p>Vous trouverez d'avantage de d&eacute;tails, discussions et exemples
dans la
@@ -63,80 +62,43 @@ d'Apache</compatibility>
sur mod_rewrite</a>.</p>
</summary>
-<seealso><a href="#rewriteflags">Drapeaux des r&egrave;gles de r&eacute;&eacute;criture</a></seealso>
-
-
-<section id="quoting"><title>Marquage des caract&egrave;res sp&eacute;ciaux</title>
-
- <p>Depuis Apache 1.3.20, les caract&egrave;res sp&eacute;ciaux dans les
- <em>cha&icirc;nes de test</em> et les cha&icirc;nes de <em>Substitution</em>
- peuvent &ecirc;tre &eacute;chapp&eacute;s (c'est &agrave; dire trait&eacute;s comme des caract&egrave;res
- normaux sans tenir compte de leur signification en tant que
- caract&egrave;re sp&eacute;cial), en les faisant pr&eacute;c&eacute;der d'un caract&egrave;re
- anti-slash ('\'). En d'autres termes, vous pouvez inclure un
- v&eacute;ritable signe "dollar" dans une cha&icirc;ne de <em>Substitution</em>
- en utilisant '<code>\$</code>' ; ceci emp&ecirc;che mod_rewrite de le
- traiter comme une r&eacute;f&eacute;rence arri&egrave;re.</p>
-</section>
-
-<section id="EnvVar"><title>Variables d'environnement</title>
-
- <p>Ce module conserve le contenu de deux variables d'environnement
- CGI/SSI additionnelles (non standards) nomm&eacute;es
- <code>SCRIPT_URL</code> et <code>SCRIPT_URI</code>. Celles-ci
- contiennent l'adresse <em>logique</em> vue du Web
- de la ressource concern&eacute;e, tandis que les variables CGI/SSI
- standards <code>SCRIPT_NAME</code> et
- <code>SCRIPT_FILENAME</code> contiennent l'adresse
- <em>physique</em> de la ressource vue du syst&egrave;me. </p>
-
- <p>Note : ces variables conservent l'URI/URL <em>telle qu'elle
- &eacute;tait &agrave; l'arriv&eacute;e de la requ&ecirc;te</em>, c'est &agrave; dire
- <em>avant</em> tout processus de r&eacute;&eacute;criture. Il est important de
- le savoir car le processus de r&eacute;&eacute;criture est principalement
- utilis&eacute; pour r&eacute;&eacute;crire des URLs logiques en chemins physiques.
- <br />
- Ces variables sont d&eacute;finies dans un contexte du niveau serveur, ce
- qui signifie qu'elles ne sont disponibles que dans un contexte de
- r&eacute;pertoire, si <directive>RewriteEngine</directive> est positionn&eacute; &agrave;
- <code>on</code> dans un contexte de niveau serveur.</p>
-
-
-<example><title>Exemple</title>
-<pre>
-SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
-SCRIPT_FILENAME=/u/rse/.www/index.html
-SCRIPT_URL=/u/rse/
-SCRIPT_URI=http://en1.engelschall.com/u/rse/
-</pre>
-</example>
-
-</section>
-
-<section id="vhosts"><title>R&eacute;&eacute;criture et h&ocirc;tes virtuels</title>
-
- <p>Par d&eacute;faut, les h&ocirc;tes virtuels n'h&eacute;ritent pas de la
- configuration de <module>mod_rewrite</module> telle qu'elle est
- d&eacute;finie dans le contexte du serveur principal. Pour que la
- configuration du serveur principal s'applique aux h&ocirc;tes virtuels,
- vous devez ins&eacute;rez les directives suivantes dans chaque section
- <directive
- module="core" type="section">VirtualHost</directive> :</p>
-
- <example>
- RewriteEngine On<br />
- RewriteOptions Inherit
- </example>
-</section>
-
-<section id="Solutions"><title>Solutions pratiques</title>
+<section id="logging"><title>Journalisation</title>
+
+ <p><module>mod_rewrite</module> offre une journalisation d&eacute;taill&eacute;e
+ de ses actions aux niveaux de journalisation <code>trace1</code> &agrave;
+ <code>trace8</code>. Le niveau de journalisation peut &ecirc;tre d&eacute;fini de
+ mani&egrave;re sp&eacute;cifique &agrave; <module>mod_rewrite</module> via la directive
+ <directive module="core">LogLevel</directive> : jusqu'au niveau
+ <code>debug</code> aucune action n'est journalis&eacute;e, alors qu'elles
+ le sont pratiquement toutes au niveau <code>trace8</code>.</p>
+
+ <note>
+ L'utilisation d'un niveau de journalisation &eacute;lev&eacute; pour
+ <module>mod_rewrite</module> va ralentir votre serveur HTTP Apache
+ de mani&egrave;re dramatique ! N'utilisez un niveau de journalisation
+ sup&eacute;rieur &agrave; <code>trace2</code> qu'&agrave; des fins de d&eacute;bogage !
+ </note>
+
+ <example><title>Exemple</title>
+ LogLevel alert rewrite:trace3
+ </example>
+
+ <note><title>RewriteLog</title>
+ <p>Ceux qui sont familiers avec les versions pr&eacute;c&eacute;dentes de
+ <module>mod_rewrite</module> vont probablement rechercher en vain les
+ directives <code>RewriteLog</code> et
+ <code>RewriteLogLevel</code>. Elles ont &eacute;t&eacute; en effet remplac&eacute;es
+ par une configuration de la journalisation par module, comme
+ mentionn&eacute; plus haut.
+ </p>
- <p>Vous trouverez de nombreux exemples d'utilisation courante (et
- moins courante) de mod_rewrite dans le
- <a href="../rewrite/rewrite_guide.html">Guide de r&eacute;&eacute;criture</a>,
- et dans le
- <a href="../rewrite/rewrite_guide_advanced.html"
- >Guide de r&eacute;&eacute;criture avanc&eacute;e</a>.</p>
+ <p>Pour extraire les traces sp&eacute;cifiques &agrave;
+ <module>mod_rewrite</module>, affichez le fichier journal en
+ redirigeant la sortie vers grep :</p>
+ <example>
+ tail -f error_log|fgrep '[rewrite:'
+ </example>
+ </note>
</section>
@@ -218,108 +180,6 @@ la version version 2.1</compatibility>
</directivesynopsis>
<directivesynopsis>
-<name>RewriteLog</name>
-<description>D&eacute;finit le nom du fichier utilis&eacute; pour la journalisation
-des traitements du moteur de r&eacute;&eacute;criture</description>
-<syntax>RewriteLog <em>chemin du fichier journal</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>La directive <directive>RewriteLog</directive> d&eacute;finit le nom
- du fichier dans lequel le serveur journalise tout processus de
- r&eacute;&eacute;criture qu'il effectue. Si le nom ne commence pas par un
- slash ('<code>/</code>'), il est consid&eacute;r&eacute; comme relatif &agrave; la
- <em>Racine du serveur</em>. Cette directive ne doit appara&icirc;tre
- qu'une seule fois dans la configuration du serveur.</p>
-
-<note> Il est d&eacute;conseill&eacute; de positionner
- <em>chemin du fichier journal</em> &agrave; <code>/dev/null</code>
- pour d&eacute;sactiver la journalisation des processus de r&eacute;&eacute;criture,
- car m&ecirc;me si le moteur de r&eacute;&eacute;criture n'envoie plus sa sortie
- dans un fichier, il continue &agrave; cr&eacute;er un fichier journal en
- interne, <strong>ce qui va avoir pour effet de ralentir le
- serveur sans fournir aucun avantage &agrave; l'administrateur !
- </strong> Pour d&eacute;sactiver la journalisation, vous pouvez
- soit supprimer (ou commenter) la directive
- <directive>RewriteLog</directive>, soit utiliser
- <code>RewriteLogLevel 0</code> !
-</note>
-
-<note type="securitywarning"><title>S&eacute;curit&eacute;</title>
-
-Se r&eacute;f&eacute;rer au document
-<a href="../misc/security_tips.html">Conseils &agrave; propos
-de la s&eacute;curit&eacute; dans Apache</a> pour plus de d&eacute;tails sur la mani&egrave;re
-dont votre s&eacute;curit&eacute; pourrait &ecirc;tre compromise si le r&eacute;pertoire o&ugrave; se
-trouvent les fichiers journaux est accessible en &eacute;criture par quiconque
-autre que l'utilisateur qui d&eacute;marre le serveur.
-</note>
-
-<example><title>Exemple</title>
-RewriteLog "/usr/local/var/apache/logs/rewrite.log"
-</example>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLogLevel</name>
-<description>D&eacute;finit la verbosit&eacute; du fichier journal utilis&eacute;
-par le moteur de r&eacute;&eacute;criture</description>
-<syntax>RewriteLogLevel <em>niveau</em></syntax>
-<default>RewriteLogLevel 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
- <p>La directive <directive>RewriteLogLevel</directive> d&eacute;finit
- le niveau de verbosit&eacute; du fichier journal de r&eacute;&eacute;criture. Le
- niveau par d&eacute;faut 0 signifie aucune journalisation, tandis que
- 9 ou plus signifie que pratiquement toutes les actions sont
- journalis&eacute;es.</p>
-
- <p>Pour d&eacute;sactiver la journalisation des actions de r&eacute;&eacute;criture,
- positionnez simplement <em>niveau</em> &agrave; 0. Ceci d&eacute;sactive
- toute journalisation des actions de r&eacute;&eacute;criture.</p>
-
-<note> Utiliser une valeur &eacute;lev&eacute;e pour <em>niveau</em> va ralentir
- consid&eacute;rablement votre serveur Apache ! N'utilisez une
- journalisation de la r&eacute;&eacute;criture &agrave; un <em>niveau</em>
- sup&eacute;rieur &agrave; 2 qu'&agrave; des fins de d&eacute;bogage !
-</note>
-
-<example><title>Exemple</title>
-RewriteLogLevel 3
-</example>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLock</name>
-<description>D&eacute;finit le nom du fichier verrou utilis&eacute; pour la
-synchronisation de <directive
-module="mod_rewrite">RewriteMap</directive></description>
-<syntax>RewriteLock <em>chemin du fichier verrou</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
- <p>Cette directive d&eacute;finit le nom du fichier utilis&eacute; comme
- fichier verrou de synchronisation n&eacute;cessaire &agrave; mod_rewrite pour
- communiquer avec les <em>programmes</em> li&eacute;s &agrave; <directive
- module="mod_rewrite">RewriteMap</directive>. D&eacute;finissez ce
- fichier verrou dans un chemin local (et non sur un montage NFS)
- si vous voulez utiliser un programme de comparaison pour la
- r&eacute;&eacute;criture. Il n'est pas n&eacute;cessaire pour les autres types de
- comparaison pour la r&eacute;&eacute;criture.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
<name>RewriteMap</name>
<description>D&eacute;finit une fonction de mise en correspondance pour la
recherche de mots-cl&eacute;s</description>
@@ -329,7 +189,7 @@ correspondance</em>:<em>source de la correspondance</em>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>Il est possible de choisir entre plusieurs types de
-bases de donn&eacute;es depuis la version 2.0.41 d'Apache</compatibility>
+bases de donn&eacute;es depuis la version 2.0.41 du serveur HTTP Apache</compatibility>
<usage>
<p>La directive <directive>RewriteMap</directive> d&eacute;finit une
@@ -383,252 +243,41 @@ bases de donn&eacute;es depuis la version 2.0.41 d'Apache</compatibility>
et <em>source de la correspondance</em>
peuvent &ecirc;tre utilis&eacute;es :</p>
- <ul>
- <li>
- <strong>Format texte standard</strong><br />
- type de correspondance : <code>txt</code>, source de la
- correspondance : chemin du syst&egrave;me de fichiers Unix vers un
- fichier r&eacute;gulier valide
-
- <p>Il s'agit de la mise en oeuvre standard de la table de
- correspondance pour la r&eacute;&eacute;criture o&ugrave; la
- <em>source de la correspondance</em> est un fichier ASCII
- dont les diff&eacute;rentes lignes sont soit des lignes vides, soit
- des lignes de commentaires (commen&ccedil;ant par un caract&egrave;re "#"),
- soit des paires de valeurs (une seule paire
- par ligne) comme suit :</p>
-
- <p class="indent">
- <strong><em>mot-cl&eacute;</em>
- <em>valeur de remplacement</em></strong>
- </p>
-
-<example><title>Exemple</title>
-<pre>
-##
-## map.txt -- table de correspondance pour la r&eacute;&eacute;criture
-##
-
-Ralf.S.Engelschall rse # Bastard Operator From Hell
-Mr.Joe.Average joe # Mr. Average
-</pre>
-</example>
-
-<example>
-RewriteMap real-to-user txt:/chemin/vers/fichier/map.txt
-</example>
- </li>
-
- <li>
- <strong>Format texte avec valeurs al&eacute;atoires</strong><br />
- type de correspondance: <code>rnd</code>,
- source de la correspondance : chemin du syst&egrave;me de fichiers
- Unix vers un fichier r&eacute;gulier valide
-
- <p>Ce format se diff&eacute;rencie du format texte standard
- pr&eacute;c&eacute;dent par l'ajout d'un traitement suppl&eacute;mentaire : en
- plus de la recherche de cl&eacute;s, le fichier est interpr&eacute;t&eacute; en
- tenant compte de la pr&eacute;sence &eacute;ventuelle dans les valeurs de
- remplacement de caract&egrave;res ``<code>|</code>'' signifiant
- ``ou''. En d'autres termes, ces caract&egrave;res ``<code>|</code>''
- permettent de sp&eacute;cifier un jeu de valeurs parmi lesquelles
- la valeur de retour sera choisie al&eacute;atoirement. Par exemple,
- vous pouvez utiliser les fichier de correspondance et
- directives suivants pour mettre en oeuvre une r&eacute;partition de
- charge al&eacute;atoire entre plusieurs serveurs en arri&egrave;re-plan,
- via un mandataire inverse. Les images sont envoy&eacute;es &agrave; un des
- serveurs de l'ensemble "statique", tandis que tout le
- reste est envoy&eacute; &agrave; un des serveurs de l'ensemble
- "dynamique".</p>
- <p>Exemple:</p>
-
-<example><title>Fichier de correspondances pour la r&eacute;&eacute;criture</title>
-<pre>
-##
-## map.txt -- correspondances pour la r&eacute;&eacute;criture
-##
-
-static www1|www2|www3|www4
-dynamic www5|www6
-</pre>
-</example>
-
-<example><title>Directives de configuration</title>
-RewriteMap serveurs rnd:/chemin/vers/fichier/map.txt<br />
-<br />
-RewriteRule ^/(.*\.(png|gif|jpg)) http://${serveurs:static}/$1
-[NC,P,L]<br />
-RewriteRule ^/(.*) http://${serveurs:dynamic}/$1 [P,L]
-</example>
- </li>
-
- <li>
- <strong>Fichier &agrave; acc&egrave;s direct (Hash file)</strong><br />
- type de correspondance :
- <code>dbm[=<em>type</em>]</code>, source de la
- correspondance : chemin du syst&egrave;me de fichiers Unix vers un
- fichier r&eacute;gulier valide
-
- <p>Ici, la source de la correspondance est un fichier binaire
- au format DBM contenant les m&ecirc;mes donn&eacute;es qu'un fichier au
- format <em>Plein texte</em>, mais selon une repr&eacute;sentation
- particuli&egrave;re optimis&eacute;e en vue d'une recherche tr&egrave;s rapide.
- Le <em>type</em> peut &ecirc;tre sdbm, gdbm, ndbm, ou db selon la
- configuration &agrave; la <a href="../install.html#dbm">compilation
- </a>. Si <em>type</em> est omis, la valeur retenue
- sera la valeur par d&eacute;faut d&eacute;finie &agrave; la compilation.</p>
-
- <p>La cr&eacute;ation du fichier dbm &agrave; partir d'un fichier texte
- s'effectue &agrave; l'aide de l'utilitaire <a
- href="../programs/httxt2dbm.html">httxt2dbm</a>.</p>
-
-<example>
-$ httxt2dbm -i fichier-source.txt -o fichier-dbm.map
-</example>
- </li>
-
- <li>
- <strong>Fonction interne</strong><br />
- type de la correspondance : <code>int</code>,
- source de la correspondance : fonction interne &agrave; Apache
-
- <p>Ici, la source de la correspondance est une fonction
- interne &agrave; Apache. Actuellement, vous ne pouvez pas cr&eacute;er
- votre propre fonction, mais les fonctions suivantes
- existent d&eacute;j&agrave; :</p>
-
- <ul>
- <li><strong>toupper</strong>:<br />
- Convertit tous les caract&egrave;res de la cl&eacute; en majuscules.</li>
-
- <li><strong>tolower</strong>:<br />
- Convertit tous les caract&egrave;res de la cl&eacute; en minuscules.</li>
-
- <li><strong>escape</strong>:<br />
- Traduit les caract&egrave;res sp&eacute;ciaux que contient la cl&eacute; en
- s&eacute;quences hexad&eacute;cimales.</li>
-
- <li><strong>unescape</strong>:<br />
- Reconvertit les s&eacute;quences hexad&eacute;cimales que contient la
- cl&eacute; en caract&egrave;res sp&eacute;ciaux.</li>
- </ul>
- </li>
-
- <li>
- <strong>Programme de r&eacute;&eacute;criture externe</strong><br />
- type de la correspondance : <code>prg</code>,
- source de la correspondance :
- chemin du syst&egrave;me de fichiers Unix vers un
- fichier r&eacute;gulier valide
-
- <p>Ici, la source n'est pas un fichier de correspondances,
- mais un programme. Pour le cr&eacute;er, vous pouvez utiliser le
- langage de votre choix, mais le programme doit &ecirc;tre un
- ex&eacute;cutable (soit du code objet, soit un script
- contenant le fameux
- "<code>#!/chemin/vers/interpr&eacute;teur</code>" au d&eacute;but de sa
- premi&egrave;re ligne).</p>
-
- <p>Ce programme est lanc&eacute; une seule fois au d&eacute;marrage du
- serveur Apache, puis communique avec le moteur de r&eacute;&eacute;criture
- via ses entr&eacute;e et sortie standards (<code>stdin</code>
- et <code>stdout</code>). A chaque recherche effectu&eacute;e par la
- fonction de correspondance, il re&ccedil;oit sur son entr&eacute;e standard
- la cl&eacute; &agrave; rechercher sous la forme d'une cha&icirc;ne de caract&egrave;res
- termin&eacute;e par le caract&egrave;re "nouvelle ligne". Il doit ensuite
- renvoyer sur sa sortie standard la valeur recherch&eacute;e sous
- la forme d'une cha&icirc;ne de caract&egrave;res termin&eacute;e par le caract&egrave;re
- "nouvelle ligne", ou la cha&icirc;ne de quatre
- caract&egrave;res ``<code>NULL</code>'' en cas d'&eacute;chec
- (<em>c'est &agrave; dire</em>
- si aucune valeur ne correspond &agrave; la cl&eacute; fournie).</p>
-
- <p>Les programmes de r&eacute;&eacute;criture externes ne seront pas lanc&eacute;s
- s'ils ont &eacute;t&eacute; d&eacute;finis dans un contexte o&ugrave; la directive
- <directive>RewriteEngine</directive> n'a pas &eacute;t&eacute; d&eacute;finie &agrave;
- <code>on</code>.</p>
-
- <p>Voici un
- exemple de ce pourrait &ecirc;tre un programme trivial qui
- impl&eacute;menterait une correspondance 1:1 (<em>c'est &agrave; dire</em>,
- cl&eacute; == valeur) :</p>
-
-<example>
-<pre>
-#!/usr/bin/perl
-$| = 1;
-while (&lt;STDIN&gt;) {
- # ...ins&eacute;rer ici le code de transformation ou de recherche...
- print $_;
-}
-</pre>
-</example>
-
- <p>Mais soyez tr&egrave;s prudent :</p>
-
- <ol>
- <li>``<em>Ce programme doit &ecirc;tre simple, basique</em>''
- (MERCI).
- Si ce programme se bloque, il bloquera aussi Apache
- lorsqu'il tentera d'utiliser la r&egrave;gle de r&eacute;&eacute;criture
- correspondante.</li>
-
- <li>L'utilisation d'entr&eacute;es/sorties avec tampon sur
- <code>stdout</code> est une erreur courante. Ceci est &agrave;
- proscrire sous peine de cr&eacute;er une boucle infernale ! Pour
- &eacute;viter ceci, on utilise (en langage Perl) ``<code>$|=1</code>'' comme dans
- l'exemple ci-dessus.</li>
-
- <li>On peut d&eacute;finir la directive <directive
- module="mod_rewrite">RewriteLock</directive> pour sp&eacute;cifier
- un fichier verrou que mod_rewrite pourra utiliser pour
- synchroniser les communications avec le programme de
- correspondance. Par d&eacute;faut, aucune synchronisation de ce
- type n'est mise en oeuvre.</li>
- </ol>
- </li>
- <li>
- <p><strong>Requ&ecirc;te SQL</strong><br />
- type de correspondance : <code>dbd</code> ou
- <code>fastdbd</code>,
- source de la correspondance : une requ&ecirc;te SQL SELECT qui
- comporte un seul argument et renvoie une seule valeur.</p>
- <p>Ici, on utilise <module>mod_dbd</module> pour impl&eacute;menter
- une correspondance pour la r&eacute;&eacute;criture par recherche dans une
- base de donn&eacute;es SQL. Deux modes sont possibles :
- <code>fastdbd</code> met en cache les recherches dans la base
- de donn&eacute;es en interne, alors que <code>dbd</code> ne le fait
- pas. Ainsi, <code>dbd</code> diminue les performances, mais
- donnera toujours une r&eacute;ponse actualis&eacute;e, m&ecirc;me si le contenu
- de la base de donn&eacute;es est mise &agrave; jour, alors que
- <code>fastdbd</code> est plus performant mais ne relira pas
- le contenu de la base de donn&eacute;es tant que le serveur ne sera
- pas red&eacute;marr&eacute;.</p>
- <p>Si une requ&ecirc;te renvoie plusieurs r&eacute;ponses, une de ces
- derni&egrave;res sera choisie al&eacute;atoirement.</p>
-<example>
-<title>Example</title>
-RewriteMap ma-requete "fastdbd:SELECT destination FROM rewrite WHERE source = %s"
-</example>
- </li>
- </ul>
- <p>La directive <directive>RewriteMap</directive> peut
- appara&icirc;tre plusieurs fois. Utilisez une directive
- <directive>RewriteMap</directive> par fonction de correspondance
- pour d&eacute;clarer son fichier de correspondance pour la r&eacute;&eacute;criture.
- Bien que vous ne puissiez pas <strong>d&eacute;clarer</strong> une
- table de correspondance dans un contexte de r&eacute;pertoire, vous
- pouvez bien entendu <strong>utiliser</strong> cette table dans un
- contexte de r&eacute;pertoire. </p>
-
-<note><title>Note</title> En ce qui concerne les fichiers au format DBM
-et texte plat, les cl&eacute;s de recherches sont mises en cache en interne
-jusqu'&agrave; ce que le <code>mtime (date de modification)</code> du fichier
-soit modifi&eacute;, ou que le serveur soit red&eacute;marr&eacute;. Ainsi, certaines
-fonctions de correspondance dans les r&egrave;gles peuvent &ecirc;tre utilis&eacute;es pour
-<strong>chaque</strong> requ&ecirc;te. Cela ne pose pas probl&egrave;me, car la
-recherche externe n'intervient qu'une seule fois !
-</note>
+<dl>
+ <dt>txt</dt>
+ <dd>Un fichier texte contenant des paires cl&eacute;-valeur s&eacute;par&eacute;es
+ par des espaces, une paire par ligne (<a
+ href="../rewrite/rewritemap.html#txt">D&eacute;tails ...</a>).</dd>
+
+ <dt>rnd</dt>
+ <dd>S&eacute;lection al&eacute;atoire d'une entr&eacute;e depuis un fichier texte (<a
+ href="../rewrite/rewritemap.html#rnd">D&eacute;tails ...</a>).</dd>
+
+ <dt>dbm</dt>
+ <dd>Recherche une entr&eacute;e dans un fichier dbm contenant des
+ paires nom-valeur. Le condens&eacute; hash est &eacute;labor&eacute; &agrave; partir d'un
+ format de fichier texte via l'utilitaire <code><a
+ href="../programs/httxt2dbm.html">httxt2dbm</a></code> (<a
+ href="../rewrite/rewritemap.html#dbm">D&eacute;tails ...</a>).</dd>
+
+ <dt>int</dt>
+ <dd>Une des quatre fonctions internes disponibles que fournit
+ <code>RewriteMap</code>: toupper, tolower, escape ou unescape
+ (<a href="../rewrite/rewritemap.html#int">D&eacute;tails ...</a>).</dd>
+
+ <dt>prg</dt>
+ <dd>Appelle un programme externe ou un script pour effectuer la
+ r&eacute;&eacute;criture (<a href="../rewrite/rewritemap.html#int">D&eacute;tails
+ ...</a>).</dd>
+
+ <dt>dbd or fastdbd</dt>
+ <dd>Une commande SQL SELECT &agrave; ex&eacute;cuter pour rechercher la cible
+ de r&eacute;&eacute;criture (<a href="../rewrite/rewritemap.html#int">D&eacute;tails
+ ...</a>).</dd>
+ </dl>
+
+<p>Vous trouverez plus de d&eacute;tails et de nombreux exemples dans le <a
+href="../rewrite/rewritemap.html">RewriteMap HowTo</a>.</p>
</usage>
</directivesynopsis>
@@ -638,105 +287,52 @@ recherche externe n'intervient qu'une seule fois !
<description>D&eacute;finit l'URL de base pour les r&eacute;&eacute;critures au niveau
r&eacute;pertoire</description>
<syntax>RewriteBase <em>chemin URL</em></syntax>
-<default>Voir utilisation pour plus d'informations.</default>
+<default>Pas de valeur par d&eacute;faut</default>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<usage>
<p>La directive <directive>RewriteBase</directive> d&eacute;finit
- explicitement l'URL de base pour les r&eacute;&eacute;critures au niveau du
- r&eacute;pertoire. Comme vous le verrez plus loin, la directive
- <directive module="mod_rewrite">RewriteRule</directive> peut
- &ecirc;tre utilis&eacute;e dans les fichiers de configuration au niveau du
- r&eacute;pertoire (<code>.htaccess</code>). Elle agit alors localement,
- en amputant le r&eacute;pertoire local de son pr&eacute;fixe avant traitement,
- et en n'appliquant les r&egrave;gles de r&eacute;&eacute;criture que sur ce qui reste
- de l'URL. Lorsque le traitement est termin&eacute;, le pr&eacute;fixe est
- automatiquement rajout&eacute; &agrave; l'URL. La valeur par d&eacute;faut est
- <directive>RewriteBase</directive>
- <em>chemin r&eacute;pertoire physique</em></p>
-
- <p>Lorsqu'une substitution intervient pour une nouvelle URL, ce
- module doit r&eacute;injecter l'URL dans le traitement du serveur. Pour
- y parvenir, il doit conna&icirc;tre le pr&eacute;fixe de l'URL ou l'URL de
- base correspondants. Par d&eacute;faut, le pr&eacute;fixe est le chemin du
- fichier correspondant lui-m&ecirc;me. <strong>Cependant, pour la
- plupart des sites web, les URLs ne correspondent PAS directement
- aux chemins des fichiers physiques, cette assertion s'av&egrave;re
- ainsi souvent fausse !</strong>. C'est pourquoi vous pouvez
- utiliser la directive <code>RewriteBase</code> pour sp&eacute;cifier
- le pr&eacute;fixe correct.</p>
-
-<note> Si les URLs de votre serveur web ne correspondent
-<strong>pas</strong> directement aux chemins physiques des fichiers,
-vous devrez utiliser <directive>RewriteBase</directive> dans chaque
-fichier <code>.htaccess</code> o&ugrave; vous voudrez utiliser des
-directives <directive
-module="mod_rewrite">RewriteRule</directive>.
-</note>
-
- <p> Par exemple, consid&eacute;rons le fichier de configuration de
- r&eacute;pertoire suivant :</p>
-
+ explicitement le chemin URL de base (et non le chemin du
+ r&eacute;pertoire dans le syst&egrave;me de fichiers !) pour les r&eacute;&eacute;critures dans un contexte
+ de r&eacute;pertoire. Lorsque vous utilisez une directive <directive
+ module="mod_rewrite">RewriteRule</directive> dans un fichier
+ <code>.htaccess</code>, <module>mod_rewrite</module> enl&egrave;ve le
+ pr&eacute;fixe de r&eacute;pertoire local avant d'effectuer le traitement, puis
+ r&eacute;&eacute;crit ce qui reste de l'URL. Lorsque la r&eacute;&eacute;criture est termin&eacute;e,
+ <module>mod_rewrite</module> rajoute automatiquement le pr&eacute;fixe de
+ r&eacute;pertoire local au chemin.</p>
+
+ <p>Cette directive est <em>requise</em> pour les r&eacute;&eacute;critures
+ dans un contexte de r&eacute;pertoire d&eacute;fini via la directive
+ <directive module="mod_alias">Alias</directive>.</p>
+
+ <p>Si votre chemin URL n'existe pas r&eacute;ellement dans le syst&egrave;me de
+ fichiers, ou ne trouve pas directement sous le r&eacute;pertoire d&eacute;fini
+ par la directive <directive
+ module="core">DocumentRoot</directive>, vous devez utiliser la
+ directive <directive>RewriteBase</directive> dans chaque fichier
+ <code>.htaccess</code> o&ugrave; vous voulez utiliser des directives <directive
+ module="mod_rewrite">RewriteRule</directive>.</p>
+
+ <p>L'exemple ci-dessous montre comment faire correspondre
+ http://example.com/mon-appli/index.html &agrave;
+ /home/www/exemple/nouveau_site.html dans un fichier
+ <code>.htaccess</code>. On suppose que le contenu disponible &agrave;
+ http://example.com/ se situe sur le disque &agrave;
+ /home/www/exemple/.</p>
+
<example>
<pre>
-#
-# /abc/def/.htaccess -- fichier de configuration pour le r&eacute;pertoire
-/abc/def
-# Rappel : /abc/def est le chemin physique de /xyz,
-# <em>ce qui veut dire</em> que la configuration du serveur comporte
-# une directive du style 'Alias /xyz /abc/def'.
-#
-
RewriteEngine On
-
-# faisons savoir au serveur qu'on nous a atteint via /xyz et non par
-# le chemin physique /abc/def
-RewriteBase /xyz
-
-# maintenant les r&egrave;gles de r&eacute;&eacute;criture
-RewriteRule ^avant\.html$ apr&egrave;s.html
+# Le chemin URL utilis&eacute; pour arriver dans ce contexte, et non le chemin
+# du syst&egrave;me de fichiers
+RewriteBase /mon-appli/
+RewriteRule ^index\.html$ nouveau_site.html
</pre>
</example>
- <p>Dans l'exemple pr&eacute;c&eacute;dent, une requ&ecirc;te pour
- <code>/xyz/avant.html</code> sera correctement r&eacute;&eacute;crite sous
- sous sa forme chemin physique
- <code>/abc/def/apr&egrave;s.html</code>.</p>
-
-<note><title>Pour les hackers d'Apache</title>
-<p>La liste suivante fournit des informations d&eacute;taill&eacute;es &agrave; propos des
-&eacute;tapes du traitement interne :</p>
-<pre>
-Requ&ecirc;te :
- /xyz/avant.html
-
-Traitement interne :
- /xyz/avant.html -&gt; /abc/def/avant.html (Alias au niveau serveur)
- /abc/def/avant.html -&gt; /abc/def/apr&egrave;s.html (RewriteRule au niveau r&eacute;pertoire)
- /abc/def/apr&egrave;s.html -&gt; /xyz/apr&egrave;s.html (RewriteBase au niveau r&eacute;pertoire)
- /xyz/apr&egrave;s.html -&gt; /abc/def/apr&egrave;s.html (Alias au niveau serveur)
-
-R&eacute;sultat :
- /abc/def/apr&egrave;s.html
-
-</pre>
- <p>Tout ceci para&icirc;t tr&egrave;s compliqu&eacute;, mais correspond
- r&eacute;ellement au traitement interne d'Apache. Comme la
- r&eacute;&eacute;criture au niveau du r&eacute;pertoire intervient plus tard
- au cours du traitement, la requ&ecirc;te de r&eacute;&eacute;criture doit &ecirc;tre
- r&eacute;inject&eacute;e dans le noyau d'Apache, comme s'il s'agissait
- d'une nouvelle requ&ecirc;te (Voir les <a
- href="../rewrite/tech.html">d&eacute;tails techniques &agrave;
- propos de mod_rewrite</a>). La surcharge
- correspondante n'est pas aussi importante qu'il n'y
- para&icirc;t, car la r&eacute;injection est enti&egrave;rement prise en charge
- en interne par Apache (comme c'est d'ailleurs le cas pour
- de nombreuses autres op&eacute;rations effectu&eacute;es &agrave; l'int&eacute;rieur
- d'Apache).</p>
-</note>
-
</usage>
</directivesynopsis>
@@ -753,52 +349,50 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
<override>FileInfo</override>
<usage>
- <p>La directive <directive>RewriteCond</directive> d&eacute;finit une
- condition d'application d'une certaine r&egrave;gle. Une ou plusieurs
- directives <directive>RewriteCond</directive> peuvent pr&eacute;c&eacute;der
- une directive
- <directive module="mod_rewrite">RewriteRule</directive>. La r&egrave;gle
- qui suit n'est appliqu&eacute;e que si l'&eacute;tat actuel de l'URI
- correspond &agrave; son mod&egrave;le, <strong
- >et</strong> si les conditions sont satisfaites.</p>
-
- <p><em>cha&icirc;ne de test</em> est une cha&icirc;ne de caract&egrave;res qui peut
- contenir, en plus du texte plat, les constructions &eacute;tendues
- suivantes :</p>
-
+ <p>La directive <directive>RewriteCond</directive> permet de d&eacute;finir une
+ condition d'ex&eacute;cution d'une r&egrave;gle. Une ou plusieurs conditions
+ <directive>RewriteCond</directive> peuvent pr&eacute;c&eacute;der une
+ directive <directive module="mod_rewrite"
+ >RewriteRule</directive>. La r&egrave;gle de r&eacute;&eacute;criture correspondante n'est
+ ainsi ex&eacute;cut&eacute;e que si ces conditions sont satisfaites,
+ <strong>et</strong> si l'URI correspond au mod&egrave;le sp&eacute;cifi&eacute; dans la
+ r&egrave;gle.</p>
+
+ <p><em>TestString</em> est une cha&icirc;ne qui peut contenir les
+ extensions suivantes en plus du texte simple :</p>
+
<ul>
<li>
<strong>r&eacute;f&eacute;rences arri&egrave;res de r&egrave;gle de r&eacute;&eacute;criture</strong> :
ce sont des r&eacute;f&eacute;rences arri&egrave;res de la forme
- <strong><code>$N</code></strong> (0 &lt;= N &lt;= 9), qui
- donnent acc&egrave;s aux parties group&eacute;es (entre parenth&egrave;ses) du
- mod&egrave;le tir&eacute; de la <code>RewriteRule</code> assujettie au
- jeu de conditions concern&eacute;.
- </li>
+ <strong><code>$N</code></strong> (0 &lt;= N &lt;= 9). $1 &agrave; $9
+ permettent d'acc&eacute;der aux parties regroup&eacute;es (entre
+ parenth&egrave;ses) du mod&egrave;le, issues de la <code>RewriteRule</code>
+ concern&eacute;e par le jeu de conditions <code>RewriteCond</code>
+ courant. $0 donne acc&egrave;s &agrave; l'ensemble de la cha&icirc;ne
+ correspondant au mod&egrave;le.</li>
<li>
<strong>R&eacute;f&eacute;rences arri&egrave;res de condition de r&eacute;&eacute;criture
</strong> : ce sont des r&eacute;f&eacute;rences arri&egrave;res de la forme
- <strong><code>%N</code></strong> (1 &lt;= N &lt;= 9), qui
- donnent acc&egrave;s aux parties group&eacute;es (l&agrave; aussi entre
- parenth&egrave;ses) du mod&egrave;le de la derni&egrave;re condition satisfaite
- du jeu de conditions concern&eacute;.
- </li>
+ <strong><code>%N</code></strong> (0 &lt;= N &lt;= 9). %1 &agrave; %9
+ permettent d'acc&eacute;der aux parties regroup&eacute;es (entre
+ parenth&egrave;ses) du mod&egrave;le, issues de la <code>RewriteRule</code>
+ concern&eacute;e par le jeu de conditions <code>RewriteCond</code>
+ courant. %0 donne acc&egrave;s &agrave; l'ensemble de la cha&icirc;ne
+ correspondant au mod&egrave;le.</li>
<li>
<strong>extensions de table de r&eacute;&eacute;criture</strong> :
ce sont des extensions de la forme <strong><code
- >${nomTable:cl&eacute;|d&eacute;faut}</code></strong>. Voir
- <a href="#mapfunc">la documentation de
- RewriteMap</a> pour plus de d&eacute;tails.
+ >${nomTable:cl&eacute;|d&eacute;faut}</code></strong>. Voir la <a
+ >href="#mapfunc">documentation sur RewriteMap</a>
+ pour plus de d&eacute;tails.
</li>
<li>
<strong>Variables du serveur</strong> :
ce sont des variables de la forme
- <strong><code>%{</code> <em>NOM_DE_VARIABLE</em>
- <code>}</code></strong>
- <strong><code>%{</code> <em>NOM_DE_VARIABLE</em>
- <code>}</code></strong> o&ugrave; <em>NOM_DE_VARIABLE</em>
- peut &ecirc;tre une cha&icirc;ne de caract&egrave;res faisant partie de la
- liste suivante :
+ <strong><code>%{</code> <em>NAME_OF_VARIABLE</em> <code>}</code></strong>,
+ o&ugrave; <em>NOM_DE_VARIABLE</em> peut contenir une cha&icirc;ne issue
+ de la liste suivante :
<table>
<columnspec><column width=".3"/><column width=".3"/>
@@ -870,19 +464,18 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
</td>
</tr>
</table>
-
- <p>Toutes ces variables correspondent nom pour nom aux
- en-t&ecirc;tes MIME HTTP, aux variables C du serveur Apache
- ou aux champs <code>struct tm</code> du syst&egrave;me Unix.
- La plupart sont document&eacute;es dans une autre partie du
- manuel ou dans la sp&eacute;cification CGI. Vous trouverez
- dans ce qui suit quelques variables sp&eacute;cifiques
- &agrave; mod_rewrite.</p>
- <note>
+
+ <p>Ces variables correspondent toutes aux en-t&ecirc;tes MIME
+ HTTP de m&ecirc;mes noms, au variables C du serveur HTTP Apache, ou
+ aux champs <code>struct tm</code> du syst&egrave;me Unix. La
+ plupart d'entre elles sont document&eacute;es ailleurs dans le
+ manuel ou dans la sp&eacute;cification CGI. Parmi les variables
+ sp&eacute;cifiques &agrave; mod_rewrite, ou trouve les suivantes :</p>
+ <note>
<dl>
<dt><code>IS_SUBREQ</code></dt>
- <dd>Contiendra le texte "true" si la requ&ecirc;te en cours
+ <dd>Contient le texte "true" si la requ&ecirc;te en cours
de traitement est une sous-requ&ecirc;te, "false" dans le
cas contraire. Une sous-requ&ecirc;te est g&eacute;n&eacute;r&eacute;e quand un
module a besoin de se r&eacute;f&eacute;rer &agrave; des fichiers ou URIs
@@ -890,15 +483,16 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
<dt><code>API_VERSION</code></dt>
- <dd>Il s'agit de la version de l'API des modules
- Apache (l'interface interne entre le serveur et les
- modules) dans la construction actuelle de httpd,
- telle qu'elle est d&eacute;finie dans include/ap_mmn.h. La
- version de l'API des modules correspond &agrave; la version
- d'Apache utilis&eacute;e (pour Apache 1.3.14, par exemple,
- la version de l'API sera 19990320:10), mais cette
- information int&eacute;resse principalement les
- d&eacute;veloppeurs de modules.</dd>
+ <dd>C'est la version de l'API des modules Apache httpd
+ (l'interface interne entre le serveur et les modules)
+ pour la construction courante de httpd, telle qu'elle
+ est d&eacute;finie dans include/ap_mmn.h. La version de l'API
+ des modules correspond &agrave; la version du serveur Apache
+ httpd
+ utilis&eacute; (par exemple, pour la version 1.3.14 d'Apache
+ httpd,
+ il s'agit de la version 19990320:10), mais int&eacute;resse
+ principalement les auteurs de modules.</dd>
<dt><code>THE_REQUEST</code></dt>
@@ -910,134 +504,142 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
<dt><code>REQUEST_URI</code></dt>
<dd>La ressource demand&eacute;e dans la ligne de requ&ecirc;te
- HTTP (correspondrait, dans l'exemple pr&eacute;c&eacute;dent, &agrave;
- "/index.html").</dd>
+ HTTP ("/index.html" dans l'exemple ci-dessus).</dd>
<dt><code>REQUEST_FILENAME</code></dt>
<dd>Le chemin complet local au syst&egrave;me de fichiers
du fichier ou du script correspondant
- &agrave; la requ&ecirc;te.</dd>
+ &agrave; la requ&ecirc;te, s'il a d&eacute;j&agrave; &eacute;t&eacute; d&eacute;termin&eacute; par le serveur
+ au moment o&ugrave; on y fait r&eacute;f&eacute;rence. Dans le cas
+ contraire, et en particulier dans le cas d'un serveur
+ virtuel, <code>REQUEST_FILENAME</code> contient la
+ valeur de <code>REQUEST_URI</code>.</dd>
<dt><code>HTTPS</code></dt>
- <dd>Contiendra le texte "on" si la connexion
+ <dd>Contient le texte "on" si la connexion
utilise SSL/TLS, "off" dans le cas contraire
- (L'utilisation de cette variable est pertinente,
- ind&eacute;pendamment du fait que <module>mod_ssl</module>
- soit charg&eacute; ou non).</dd>
+ (Cette variable peut &ecirc;tre utilis&eacute;e sans probl&egrave;me, que
+ <module>mod_ssl</module> soit charg&eacute; ou non.</dd>
</dl>
</note>
</li>
</ul>
- <p>Autres points &agrave; conna&icirc;tre :</p>
-
+ <p>Autres points &agrave; conna&icirc;tre ::</p>
<ol>
<li>
- <p>Les variables SCRIPT_FILENAME et REQUEST_FILENAME ont la
- m&ecirc;me valeur - celle du champ <code>filename</code> de la
- structure interne du serveur Apache <code>request_rec</code>.
- Le premier nom est bien connu en tant que variable CGI,
- alors que le second est &eacute;quivalent &agrave; REQUEST_URI (qui contient
- la valeur du champ <code>uri</code> de la structure
+ <p>Les variables <code>SCRIPT_FILENAME</code> et
+ <code>REQUEST_FILENAME</code> contiennent toutes deux la valeur
+ du champ <code>filename</code> de la
+ structure interne <code>request_rec</code>du serveur HTTP Apache.
+ Le premier nom correspond au nom de variable bien connu CGI,
+ alors que le second est l'&eacute;quivalent de REQUEST_URI (qui
+ contient la valeur du champ <code>uri</code> de
<code>request_rec</code>).</p>
- <p>Si une substitution intervient et si la r&eacute;&eacute;criture continue,
- les valeurs des deux variables seront mises &agrave; jour en
+ <p>Si une substitution intervient et si la r&eacute;&eacute;criture se
+ poursuit, la valeur des deux variables sera mise &agrave; jour en
cons&eacute;quence.</p>
- <p>Dans un contexte de niveau serveur (<em>c'est &agrave; dire</em>
- avant que la requ&ecirc;te soit mise en correspondance avec le syst&egrave;me
- de fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
- contenir le chemin complet dans le syst&egrave;me de fichier local car
- ce dernier n'est pas encore connu &agrave; ce niveau du traitement.
- Dans ce cas, les deux variables contiendront initialement la
- valeur de REQUEST_URI. Pour avoir acc&egrave;s au chemin complet de la
- requ&ecirc;te dans le syst&egrave;me de fichiers local dans un contexte de
- niveau serveur, utilisez une r&eacute;f&eacute;rence avant &agrave; base d'URL
+ <p>Dans le contexte du serveur principal (c'est &agrave; dire avant que
+ la requ&ecirc;te ne soit mise en correspondance avec le syst&egrave;me de
+ fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas
+ contenir le chemin entier dans le syst&egrave;me de fichiers local car
+ ce chemin b'est pas connu &agrave; ce stade du traitement. Dans ce cas,
+ les deux variables contiendront la valeur de REQUEST_URI. Pour
+ obtenir le chemin complet de la requ&ecirc;te dans le syst&egrave;me de
+ fichiers local dans le contexte du serveur principal, utilisez une
+ r&eacute;f&eacute;rence avant &agrave; base d'URL
<code>%{LA-U:REQUEST_FILENAME}</code> pour d&eacute;terminer la valeur
finale de REQUEST_FILENAME.</p></li>
- <li>On peut &eacute;galement utiliser <code>%{ENV:variable}</code>, o&ugrave;
- <em>variable</em> peut &ecirc;tre remplac&eacute; par toute variable
- d'environnement. Ces variables sont recherch&eacute;es dans les
- structures internes d'Apache, et (si elles n'y figurent pas)
- via <code>getenv()</code> depuis le processus du serveur
- Apache.</li>
+
+ <li>
+ <code>%{ENV:<em>variable</em>}</code>, o&ugrave; <em>variable</em> peut
+ correspondre &agrave; une variable d'environnement quelconque.</li>
+ <li>
+ <code>%{ENV:variable}</code> est aussi disponible, o&ugrave;
+ <em>variable</em> peut correspondre &agrave; toute variable
+ d'environnement. Peut &ecirc;tre consult&eacute; via des structures internes
+ d'Apache httpd et (si on ne les trouve pas ici) via la fonction
+ <code>getenv()</code> &agrave; partir du processus du serveur Apache
+ httpd.</li>
<li>Que <module>mod_ssl</module> soit charg&eacute; ou non, on peut
utiliser <code>%{SSL:variable}</code>, o&ugrave; <em>variable</em>
peut &ecirc;tre remplac&eacute; par le nom d'une
<a href="mod_ssl.html#envvars">variable
- d'environnement SSL</a>, mais la valeur produite sera toujours
- une cha&icirc;ne de caract&egrave;res vide si <module>mod_ssl</module> n'est
- pas charg&eacute;. Exemple :
- <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> peut correspondre
- &agrave; <code>128</code>.</li>
-
- <li>Pour obtenir la valeur d'un en-t&ecirc;te contenu dans une requ&ecirc;te
- HTTP, on peut toujours utiliser <code>%{HTTP:header}</code>,
- o&ugrave; <em>header</em> peut &ecirc;tre remplac&eacute; par tout nom d'en-t&ecirc;te
- MIME HTTP. Exemple : <code>%{HTTP:Proxy-Connection}</code> est
- la valeur de l'en-t&ecirc;te HTTP ``<code>Proxy-Connection:</code>''.
- <p>Si une condition contient un en-t&ecirc;te HTTP, il est ajout&eacute; &agrave;
- l'en-t&ecirc;te Vary de la r&eacute;ponse dans le cas o&ugrave; la condition est
- &eacute;valu&eacute;e &agrave; true pour la requ&ecirc;te. Dans le cas contraire, il n'est
- <strong>pas</strong> ajout&eacute;. L'ajout de l'en-t&ecirc;te HTTP &agrave;
- l'en-t&ecirc;te Vary de la r&eacute;ponse s'av&egrave;re n&eacute;cessaire pour une mise
- en cache correcte.</p>
- <p>Il faut garder &agrave; l'esprit que les conditions suivent une
- logique de court-circuit en cas de pr&eacute;sence du drapeau
- '<strong><code>ornext|OR</code></strong>', si bien que
- certaines d'entre elles sont susceptibles de ne pas &ecirc;tre
- &eacute;valu&eacute;es du tout.</p></li>
-
- <li>On peut utiliser <code>%{LA-U:variable}</code> pour les
- recherches en avant qui effectuent une sous-requ&ecirc;te interne
- (bas&eacute;e sur l'URL), pour d&eacute;terminer la valeur finale de
- <em>variable</em>. Cela peut servir &agrave; acc&eacute;der &agrave; une variable
- (n&eacute;cessaire pour une r&eacute;&eacute;criture) qui n'est pas disponible dans
- la situation pr&eacute;sente, mais le sera dans une phase ult&eacute;rieure.
- <p>Par exemple, pour effectuer une r&eacute;&eacute;criture qui tient compte
- de la variable <code>REMOTE_USER</code> dans un contexte
- niveau serveur (fichier <code>httpd.conf</code>), vous devez
- utiliser <code>%{LA-U:REMOTE_USER}</code> ; cette variable est
- d&eacute;finie au cours des phases d'autorisation, qui interviennent
- <em>apr&egrave;s</em> la phase de traduction de l'URL (pendant
- laquelle agit mod_rewrite).</p>
- <p>Par contre, comme mod_rewrite impl&eacute;mente son contexte
- niveau r&eacute;pertoire (fichier <code>.htaccess</code>) via la
- phase Fixup de l'API, et comme les phases d'autorisation
- interviennent <em>avant</em> cette phase, vous pouvez vous contenter
- d'utiliser <code>%{REMOTE_USER}</code>
- dans le contexte niveau serveur.</p></li>
-
- <li>On peut utiliser <code>%{LA-F:variable}</code> pour
- effectuer une sous-requ&ecirc;te interne (bas&eacute;e sur un nom de
- fichier), pour d&eacute;terminer la valeur finale de
- <em>variable</em>. La plupart du temps, elle est identique &agrave;
- LA-U vue pr&eacute;c&eacute;demment.</li>
- </ol>
+ d'environnement SSL</a> . Si <module>mod_ssl</module> n'est pas
+ charg&eacute;, cette variable contiendra toujours une cha&icirc;ne vide.
+ Exemple : <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> pourra
+ contenir la valeur <code>128</code>.</li>
+
+ <li>
+ On peut utiliser <code>%{HTTP:en-t&ecirc;te}</code>, o&ugrave;
+ <em>en-t&ecirc;te</em> peut correspondre &agrave; tout nom d'en-t&ecirc;te MIME
+ HTTP, pour extraire la valeur d'un en-t&ecirc;te envoy&eacute; dans la
+ requ&ecirc;te HTTP. Par exemple, <code>%{HTTP:Proxy-Connection}</code>
+ contiendra la valeur de l'en-t&ecirc;te HTTP
+ "<code>Proxy-Connection:</code>".
+ Si on utilise un en-t&ecirc;te HTTP
+ dans une condition, et si cette condition est &eacute;valu&eacute;e &agrave;
+ <code>vrai</code> pour la requ&ecirc;te, cet en-t&ecirc;te sera ajout&eacute; &agrave; l'en-t&ecirc;te Vary de
+ la r&eacute;ponse. Il ne le sera pas si la condition est &eacute;valu&eacute;e &agrave;
+ <code>faux</code>. L'ajout de l'en-t&ecirc;te HTTP &agrave; l'en-t&ecirc;te Vary
+ est n&eacute;cessaire &agrave; une mise en cache appropri&eacute;e.
+ <p>Il faut garder &agrave; l'esprit que les conditions suivent une
+ logique de cout-circuit si le drapeau
+ '<strong><code>ornext|OR</code></strong>' est utilis&eacute;, et que de
+ ce fait, certaines d'entre elles ne seront pas &eacute;valu&eacute;es.</p>
+ </li>
+
+ <li>A des fins de r&eacute;f&eacute;rence avant, on peut utiliser,
+ <code>%{LA-U:variable}</code>, qui
+ permet d'effectuer une sous-requ&ecirc;te interne &agrave; base d'URL, afin
+ de d&eacute;terminer la valeur finale de <em>variable</em>. Ceci permet
+ d'acc&eacute;der &agrave; la valeur d'une variable pour la r&eacute;&eacute;criture inconnue
+ &agrave; ce stade du traitement, mais qui sera d&eacute;finie au
+ cours d'une phase ult&eacute;rieure.
+ <p>Par exemple, pour effectuer une r&eacute;&eacute;criture d&eacute;pendant de la
+ variable <code>REMOTE_USER</code> dans le contexte du serveur
+ principal (fichier <code>httpd.conf</code>), vous devez utiliser
+ <code>%{LA-U:REMOTE_USER}</code> - cette variable est d&eacute;finie
+ par la phase d'autorisation qui intervient <em>apr&egrave;s</em> la
+ phase de traduction d'URL (pendant laquelle mod_rewrite op&egrave;re).</p>
+ <p>Par contre, comme mod_rewrite impl&eacute;mente son contexte de
+ r&eacute;pertoire (fichier <code>.htaccess</code>) via la phase Fixup
+ de l'API, et comme la phase d'autorisation intervient
+ <em>avant</em> cette derni&egrave;re, vous pouvez vous contenter
+ d'utiliser <code>%{REMOTE_USER}</code> dans ce contexte.</p></li>
+ <li>
+ <code>%{LA-F:variable}</code> peut &ecirc;tre utilis&eacute;e pour effectuer
+ une sous-requ&ecirc;te interne (bas&eacute;e sur le nom de fichier), afin de
+ d&eacute;terminer la valeur finale de <em>variable</em>. La plupart du
+ temps, elle est identique &agrave; LA-U (voir ci-dessus).</li>
+ </ol>
+
+
<p><em>expression de comparaison</em> est une expression
rationnelle qui est appliqu&eacute;e &agrave; l'instance actuelle de
<em>cha&icirc;ne de test</em>. <em>cha&icirc;ne de test</em> est d'abord
&eacute;valu&eacute;e, puis compar&eacute;e &agrave;
l'<em>expression de comparaison</em>.</p>
- <p><strong>A savoir :</strong>
- <em>expression de comparaison</em> est une
- <em>expression rationnelle compatible perl</em> avec
- quelques extensions :</p>
+ <p><em>expression de comparaison</em> est en g&eacute;n&eacute;ral une
+ <em>expression rationnelle compatible perl</em>, mais vous
+ disposez des syntaxes suppl&eacute;mentaires suivantes pour effectuer
+ d'autres tests utiles sur <em>cha&icirc;ne de test</em> :
+ </p>
<ol>
<li>Vous pouvez pr&eacute;fixer l'expression avec un caract&egrave;re
'<code>!</code>' (point d'exclamation) pour indiquer une
expression de <strong>non</strong>-correspondance.</li>
- <li>Il existe certaines variantes sp&eacute;ciales
- d'<em>expressions de comparaison</em>. A la place d'une
- expression rationnelle, vous pouvez utiliser :
+ <li>Vous pouvez effectuer des comparaisons lexicographiques de
+ cha&icirc;nes :
<ul>
<li>'<strong>&lt;expression</strong>' (inf&eacute;rieur au sens
@@ -1067,6 +669,78 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
<em>expression</em> est <code>""</code> (deux guillemets),
<em>cha&icirc;ne de test</em> est compar&eacute;e &agrave; la cha&icirc;ne vide.</li>
+ <li>'<strong>&lt;=expression de comparaison</strong>' (inf&eacute;rieur ou &eacute;gal &agrave;
+ au sens lexicographique)<br />
+ Consid&egrave;re l'<em>expression de comparaison</em> comme une
+ cha&icirc;ne de caract&egrave;res et la compare au sens lexicographique &agrave;
+ la <em>cha&icirc;ne de test</em>. Vrai si <em>cha&icirc;ne de test</em>
+ pr&eacute;c&egrave;de lexicographiquement <em>expression de comparaison</em>, ou est
+ &eacute;gale &agrave; <em>expression de comparaison</em> (les deux cha&icirc;nes
+ sont identiques, caract&egrave;re pour caract&egrave;re).</li>
+
+ <li>'<strong>&gt;=expression de comparaison</strong>'
+ (sup&eacute;rieur ou &eacute;gal &agrave; au sens lexicographique)<br />
+ Consid&egrave;re l'<em>expression de comparaison</em> comme une
+ cha&icirc;ne de caract&egrave;res et la compare au sens lexicographique &agrave;
+ la <em>cha&icirc;ne de test</em>. Vrai si <em>cha&icirc;ne de test</em>
+ suit lexicographiquement <em>expression de comparaison</em>, ou est
+ &eacute;gale &agrave; <em>expression de comparaison</em> (les deux cha&icirc;nes
+ sont identiques, caract&egrave;re pour caract&egrave;re).</li>
+ </ul></li>
+
+ <li>
+ Vous pouvez effectuer des comparaisons d'entiers :
+ <ul>
+
+ <li>'<strong>-eq</strong>' (est num&eacute;riquement &eacute;gal &agrave;)<br />
+ La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
+ et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
+ comparaison</em>. Vrai si les deux expressions sont
+ num&eacute;riquement &eacute;gales.</li>
+
+ <li>'<strong>-ge</strong>' (est num&eacute;riquement sup&eacute;rieur ou
+ &eacute;gal &agrave;)<br />
+ La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
+ et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
+ comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
+ num&eacute;riquement
+ sup&eacute;rieure ou &eacute;gale &agrave; <em>expression de comparaison</em>.</li>
+
+ <li>'<strong>-gt</strong>' (est num&eacute;riquement sup&eacute;rieur &agrave;)<br />
+ La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
+ et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
+ comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
+ num&eacute;riquement
+ sup&eacute;rieure &agrave; <em>expression de comparaison</em>.</li>
+
+ <li>'<strong>-le</strong>' (est num&eacute;riquement inf&eacute;rieur ou
+ &eacute;gal &agrave;)<br />
+ La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
+ et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
+ comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
+ num&eacute;riquement
+ inf&eacute;rieure ou &eacute;gale &agrave; <em>expression de comparaison</em>.
+ Attention &agrave; la confusion avec le drapeau <strong>-l</strong>
+ en utilisant la variante the <strong>-L</strong> ou
+ <strong>-h</strong>.</li>
+
+ <li>'<strong>-lt</strong>' (est num&eacute;riquement inf&eacute;rieur &agrave;)<br />
+ La <em>cha&icirc;ne de test</em> est consid&eacute;r&eacute;e comme un entier,
+ et est compar&eacute;e num&eacute;riquement &agrave; l'<em>expression de
+ comparaison</em>. Vrai si <em>cha&icirc;ne de test</em> est
+ num&eacute;riquement
+ inf&eacute;rieure &agrave; <em>expression de comparaison</em>.
+ Attention &agrave; la confusion avec le drapeau <strong>-l</strong>
+ en utilisant la variante the <strong>-L</strong> ou
+ <strong>-h</strong>.</li>
+
+ </ul>
+ </li>
+
+ <li>Vous pouvez effectuer diff&eacute;rents tests sur les attributs de
+ fichier :
+ <ul>
+
<li>'<strong>-d</strong>' (est un r&eacute;pertoire -
<strong>d</strong>irectory)<br />
Traite <em>cha&icirc;ne de test</em> comme un chemin et v&eacute;rifie
@@ -1077,25 +751,6 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
Traite <em>cha&icirc;ne de test</em> comme un chemin et v&eacute;rifie
s'il existe ou pas, et s'il s'agit d'un fichier r&eacute;gulier.</li>
- <li>'<strong>-s</strong>' (est un fichier r&eacute;gulier d'une
- certaine taille - <strong>s</strong>ize)<br />
- Traite <em>cha&icirc;ne de test</em> comme un chemin et v&eacute;rifie
- s'il existe ou pas, et s'il s'agit d'un fichier r&eacute;gulier
- dont la taille est sup&eacute;rieure &agrave; z&eacute;ro.</li>
-
- <li>'<strong>-l</strong>' (est un
- <strong>l</strong>ien symbolique)<br />
- Traite <em>cha&icirc;ne de test</em> comme un chemin et v&eacute;rifie
- s'il existe ou pas, et s'il s'agit d'un lien
- symbolique.</li>
-
- <li>'<strong>-x</strong>' (a le droit
- d'e<strong>x</strong>&eacute;cution)<br />
- Traite <em>cha&icirc;ne de test</em> comme un chemin et v&eacute;rifie
- s'il existe ou pas, et a le droit d'ex&eacute;cution. Ce droit est
- d&eacute;termin&eacute; en accord avec le syst&egrave;me d'exploitation
- sous-jacent.</li>
-
<li>'<strong>-F</strong>' (test de l'existence d'un fichier
via une sous-requ&ecirc;te)<br />
V&eacute;rifie si <em>cha&icirc;ne de test</em> est un fichier valide,
@@ -1105,6 +760,27 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
utiliser avec pr&eacute;cautions car les performances du serveur
peuvent s'en trouver affect&eacute;es !</li>
+ <li>'<strong>-H</strong>' (est un lien symbolique, selon la
+ convention bash)<br />
+ Voir <strong>-l</strong>.</li>
+
+ <li>'<strong>-l</strong>' (est un lien symbolique)<br />
+ Consid&egrave;re la <em>cha&icirc;ne de test</em> comme un chemin et
+ v&eacute;rifie son existence et si elle est un lien symbolique. On
+ peut aussi utiliser la convention bash <strong>-L</strong>
+ ou <strong>-h</strong> lorsqu'il y a risque de confusion
+ avec les tests <strong>-lt</strong> ou <strong>-le</strong>.</li>
+
+ <li>'<strong>-L</strong>' (est un lien symbolique, selon la
+ convention bash)<br />
+ Voir <strong>-l</strong>.</li>
+
+ <li>'<strong>-s</strong>' (est un fichier r&eacute;gulier d'une
+ certaine taille)<br />
+ Consid&egrave;re la <em>cha&icirc;ne de test</em> comme un chemin et
+ v&eacute;rifie son existence et si elle est un fichier r&eacute;gulier
+ d'une taille sup&eacute;rieure &agrave; z&eacute;ro.</li>
+
<li>'<strong>-U</strong>' (test de l'existence d'une
<strong>U</strong>RL via une sous-requ&ecirc;te)<br />
V&eacute;rifie si <em>cha&icirc;ne de test</em> est une URL valide,
@@ -1113,7 +789,14 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
sous-requ&ecirc;te interne qui effectue cette v&eacute;rification - &agrave;
utiliser avec pr&eacute;cautions car les performances du serveur
peuvent s'en trouver affect&eacute;es !</li>
- </ul>
+
+ <li>'<strong>-x</strong>' (a l'attribut d'ex&eacute;cution positionn&eacute;)<br />
+ Consid&egrave;re la <em>cha&icirc;ne de test</em> comme un chemin et
+ v&eacute;rifie son existence et si elle a son attribut d'ex&eacute;cution
+ positionn&eacute;. Ce positionnement est d&eacute;termin&eacute; en fonction de
+ l'OS sous-jacent.</li>
+
+ </ul>
<note><title>Note :</title>
Tous ces tests peuvent aussi &ecirc;tre pr&eacute;fix&eacute;s par un point
@@ -1148,9 +831,9 @@ la r&eacute;&eacute;criture soit effectu&eacute;e
<example>
<pre>
-RewriteCond %{REMOTE_HOST} ^hote1.* [OR]
-RewriteCond %{REMOTE_HOST} ^hote2.* [OR]
-RewriteCond %{REMOTE_HOST} ^hote3.*
+RewriteCond %{REMOTE_HOST} ^host1 [OR]
+RewriteCond %{REMOTE_HOST} ^host2 [OR]
+RewriteCond %{REMOTE_HOST} ^host3
RewriteRule ...r&egrave;gles concernant tous ces h&ocirc;tes...
</pre>
</example>
@@ -1181,10 +864,10 @@ RewriteRule ...r&egrave;gles concernant tous ces h&ocirc;tes...
<example>
<pre>
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
+RewriteCond %{HTTP_USER_AGENT} ^Mozilla
RewriteRule ^/$ /homepage.max.html [L]
-RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
+RewriteCond %{HTTP_USER_AGENT} ^Lynx
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
@@ -1238,17 +921,33 @@ RewriteRule ^/$ /homepage.std.html [L]
<note><title>Qu'est-ce qui est compar&eacute; ?</title>
<p>Le <em>Mod&egrave;le</em> est d'abord compar&eacute; &agrave; la partie
de l'URL apr&egrave;s le nom d'h&ocirc;te et le port, et avant la cha&icirc;ne de
- requ&ecirc;te. Si vous souhaitez faire une comparaison sur le nom
+ requ&ecirc;te.</p>
+
+ <p>Dans un contexte de r&eacute;pertoire, <em>Mod&egrave;le</em> est compar&eacute; &agrave;
+ ce qui reste de l'URL apr&egrave;s suppression du pr&eacute;fixe qui a conduit
+ Apache httpd &agrave; la r&egrave;gle courante (voir la directive <directive
+ module="mod_rewrite">RewriteBase</directive>). Le pr&eacute;fixe supprim&eacute;
+ se termine toujours par un slash, ce qui signifie que la
+ correspondance se fera toujours avec une cha&icirc;ne qui ne commence
+ pas par un slash. Un <em>Mod&egrave;le</em> contenant <code>^/</code> ne
+ correspondra jamais dans un contexte de r&eacute;pertoire.</p>
+
+
+ <p>Si vous souhaitez faire une comparaison sur le nom
d'h&ocirc;te, le port, ou la cha&icirc;ne de requ&ecirc;te, utilisez une
directive <directive module="mod_rewrite">RewriteCond</directive>
- comportant les variables
+ comportant respectivement les variables
<code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, ou
- <code>%{QUERY_STRING}</code>.</p>
+ <code>%{QUERY_STRING}</code>. Si vous d&eacute;sirez effectuer une
+ correspondance avec l'ensemble du chemin de l'URL dans un contexte
+ de r&eacute;pertoire (htaccess), utilisez la variable
+ <code>%{REQUEST_URI}</code>.</p>
</note>
<p>Pour quelques conseils &agrave; propos des <glossary
ref="regex">expressions rationnelles</glossary>, voir le
- document <a href="../rewrite/intro.html#regex">Introduction &agrave;
+ document <a
+ href="../rewrite/intro.html#regex">Introduction &agrave;
mod_rewrite</a>.</p>
<p>Dans mod_rewrite, on peut aussi utiliser le caract&egrave;re NON
@@ -1381,335 +1080,155 @@ substitution !
comme troisi&egrave;me argument de la directive
<code>RewriteRule</code>. S&eacute;par&eacute;s par des virgules au sein d'une
liste encadr&eacute;e par des crochets, les <em>drapeaux</em> peuvent
- &ecirc;tre choisis parmi les suivants : </p>
-
- <dl>
- <dt>'<code>B</code>' (r&eacute;f&eacute;rences arri&egrave;re &eacute;chapp&eacute;es)</dt>
- <dd><p>Les URLs ne doivent pas &ecirc;tre &eacute;chapp&eacute;es pour pouvoir &ecirc;tre
- compar&eacute;es par Apache, si bien que les r&eacute;f&eacute;rences arri&egrave;res
- renverront une valeur non &eacute;chapp&eacute;e au moment o&ugrave; elles seront
- appliqu&eacute;es. En utilisant le drapeau B, les caract&egrave;res non
- alphanum&eacute;riques des r&eacute;f&eacute;rences arri&egrave;res seront echapp&eacute;s. Par
- exemple, consid&eacute;rons la r&egrave;gle :</p>
- <example>
- RewriteRule ^(/.*)$ /index.php?show=$1
- </example>
- <p>Elle va faire correspondre <code>/C++</code> &agrave;
- <code>index.php?show=/C++</code>. Mais elle va aussi faire
- correspondre <code>/C%2b%2b</code> &agrave;
- <code>/index.php?show=/C++</code>, car le caract&egrave;re
- <code>%2b</code> n'a pas &eacute;t&eacute; &eacute;chapp&eacute;. Par contre, avec le
- drapeau B, la substitution s'effectuera vers
- <code>/index.php?show=/C%2b%2b</code>.</p>
- <p>Ce processus d'&eacute;chappement est particuli&egrave;rement n&eacute;cessaire
- dans le contexte du mandataire, o&ugrave; l'adresse d'arri&egrave;re-plan ne
- fonctionnera pas si elle se pr&eacute;sente sous une forme
- non &eacute;chapp&eacute;e.</p>
- </dd>
-
- <dt>'<code>chain|C</code>'
- (cha&icirc;nage avec la r&egrave;gle suivante)</dt><dd>
- Ce drapeau effectue un cha&icirc;nage entre la r&egrave;gle courante et la
- suivante (qui peut elle-m&ecirc;me &ecirc;tre cha&icirc;n&eacute;e avec la suivante, et
- ainsi de suite). Ceci provoque l'effet suivant : si une r&egrave;gle
- correspond, le processus continue normalement - le drapeau n'a
- aucun effet. Si la r&egrave;gle ne correspond <strong>pas</strong>,
- toutes les r&egrave;gles cha&icirc;n&eacute;es suivantes sont ignor&eacute;es. Par
- exemple, ce drapeau peut &ecirc;tre utilis&eacute; pour supprimer la
- partie ``<code>.www</code>'', dans un jeu de r&egrave;gles au niveau
- du r&eacute;pertoire, lorsque vous faites intervenir une redirection
- externe (o&ugrave; la partie ``<code>.www</code>'' ne doit pas
- figurer !).</dd>
-
- <dt>'<code>cookie|CO=</code><em>NOM</em>:<em>VAL</em>:<em>domaine</em>[:<em>dur&eacute;e
- de vie</em>[:<em>chemin</em>[:<em>s&eacute;curit&eacute;</em>[:<em>http
- seulement</em>]]]]'
- (d&eacute;finit un cookie)</dt><dd>
- Ce drapeau d&eacute;finit un cookie au niveau du navigateur du client.
- Le nom du cookie est sp&eacute;cifi&eacute; par <em>NOM</em>, et sa valeur
- par <em>VAL</em>. Le champ <em>domaine</em> est le domaine du
- cookie, comme '.apache.org', le champ optionnel
- <em>dur&eacute;e de vie</em> est la dur&eacute;e de vie du cookie en minutes
- (0 signifie que le cookie expire &agrave; la fin de la session),
- et le champ optionnel <em>chemin</em> le chemin du cookie. Si
- <em>s&eacute;curit&eacute;</em> est d&eacute;fini &agrave; 'secure, 'true' ou '1', le cookie ne peut
- &ecirc;tre transmis que par une connexion s&eacute;curis&eacute;e. Si <em>http
- seulement</em> est d&eacute;fini &agrave; ''HttpOnly', 'true' ou '1', le
- drapeau <code>HttpOnly</code> est utilis&eacute;, ce qui rend le cookie
- inaccessible au code JavaScript sur les navigateurs qui
- supportent ce dernier.</dd>
-
- <dt>'<code>discardpathinfo|DPI'
- (ne pas tenir compte de PATH_INFO)</code></dt><dd>
- <p>Dans un contexte de r&eacute;pertoire, l'URI par rapport auquel
- chaque r&egrave;gle <directive>RewriteRule</directive> effectue ses
- comparaisons est la concat&eacute;nation de la valeur courante de l'URI
- et de PATH_INFO.</p>
-
- <p>L'URI courant est soit l'URI initial tel qu'envoy&eacute; par le
- client, soit le r&eacute;sultat d'un passage &agrave; travers le processus de
- r&eacute;&eacute;criture, soit le r&eacute;sultat de la r&egrave;gle pr&eacute;c&eacute;dente du processus
- de r&eacute;&eacute;criture courant.</p>
-
- <p>Par contre, PATH_INFO qui est ajout&eacute; &agrave; l'URI avant chaque
- r&egrave;gle refl&egrave;te la valeur qu'avait PATH_INFO avant le processus de
- r&eacute;&eacute;criture. En cons&eacute;quence, si de larges parties de l'URI sont
- retenues et copi&eacute;es dans une cha&icirc;ne de substitution au cours de
- multiples directives <directive>RewriteRule</directive>, et ceci
- sans tenir compte de la part qui revient &agrave; PATH_INFO dans l'URI,
- il se peut que l'URI final se voit ajouter plusieurs copies de
- PATH_INFO.</p>
-
- <p>Utilisez ce drapeau dans toute substitution o&ugrave; le PATH_INFO
- r&eacute;sultant de la mise en correspondance pr&eacute;c&eacute;dente de cette
- requ&ecirc;te avec le syst&egrave;me de fichiers ne pr&eacute;sente pas d'int&eacute;r&ecirc;t.
- Ce drapeau indique qu'il ne faut pas tenir compte du PATH_INFO
- construit avant que le processus de r&eacute;&eacute;criture courant ait
- commenc&eacute;. PATH_INFO ne sera pas recalcul&eacute; avant que le processus
- de r&eacute;&eacute;criture courant se termine. Les r&egrave;gles suivantes
- rencontr&eacute;es au cours du processus ne verront que le r&eacute;sultat
- direct des substitutions, sans ajout du PATH_INFO.</p></dd>
-
- <dt>
- '<code>env|E=</code><em>VAR</em>:<em>VAL</em>'
- (d&eacute;finit une variable d'environnement)</dt><dd>
- Ce drapeau force une variable d'environnement nomm&eacute;e
- <em>VAR</em> &agrave; prendre la valeur <em>VAL</em>, o&ugrave;
- <em>VAL</em> peut contenir des r&eacute;f&eacute;rences arri&egrave;res vers des
- expressions rationnelles (<code>$N</code> et <code>%N</code>)
- qui seront &eacute;valu&eacute;es. Vous pouvez utiliser ce drapeau plusieurs
- fois pour d&eacute;finir plusieurs variables. Les variables peuvent
- ensuite &ecirc;tre d&eacute;r&eacute;f&eacute;renc&eacute;es dans de nombreux cas, et le plus
- souvent depuis XSSI (via <code>&lt;!--#echo
- var="VAR"--&gt;</code>) ou CGI (<code>$ENV{'VAR'}</code>).
- Vous pouvez d&eacute;r&eacute;f&eacute;rencer la variable dans un mod&egrave;le de
- directive RewriteCond ult&eacute;rieure, en utilisant
- <code>%{ENV:VAR}</code>. Ce drapeau permet de supprimer
- des informations d'une URL, tout en conservant la trace de
- ces informations.</dd>
-
- <dt>'<code>forbidden|F</code>' (force l'interdiction d'une
- URL)</dt><dd>
- Ce drapeau force l'interdiction de l'URL courante - il renvoie
- imm&eacute;diatement une r&eacute;ponse HTTP 403 (FORBIDDEN). Ce drapeau,
- associ&eacute; &agrave; des directives RewriteCond appropri&eacute;es, permet de
- bloquer de mani&egrave;re conditionnelle certaines URLs.</dd>
-
- <dt>'<code>gone|G</code>' (signale la non-existence d'une
- URL)</dt><dd>
- Ce drapeau signale la non-existence d'une URL - il renvoie
- imm&eacute;diatement une r&eacute;ponse HTTP 410 (GONE). Il permet de marquer
- les pages qui n'existent plus comme "gone".</dd>
-
- <dt>
- '<code>handler|H</code>=<em>Gestionnaire de contenu</em>'
- (impose un gestionnaire de contenu)</dt><dd>
- Impose <em>Gestionnaire de contenu</em> comme gestionnaire de
- contenu pour le fichier cible. Ce drapeau permet par exemple
- de simuler la directive
- <directive module="mod_alias">ScriptAlias</directive> du
- module <module>mod_alias</module>, qui impose en interne le
- gestionnaire ``<code>cgi-script</code>'' &agrave; tous les fichiers
- du r&eacute;pertoire correspondant.<br />
- Dans un contexte de niveau r&eacute;pertoire, aucune substitution ne
- doit modifier le chemin. N'utilisez ce drapeau dans un contexte
- de r&eacute;pertoire qu'avec <code>-</code> (tiret) comme
- substitution, faute de quoi la requ&ecirc;te echouera.</dd>
-
- <dt>'<code>last|L</code>'
- (derni&egrave;re r&egrave;gle)</dt><dd>
- Termine le processus de r&eacute;&eacute;criture ici et n'applique plus
- aucune r&egrave;gle de r&eacute;&eacute;criture. Ce drapeau est &eacute;quivalent &agrave; la
- commande Perl <code>last</code> ou la commande C
- <code>break</code>. Il permet d'&eacute;viter la r&eacute;&eacute;criture par les
- r&egrave;gles suivantes d'une URL d&eacute;j&agrave; r&eacute;&eacute;crite. Rappelez-vous
- cependant que si une directive
- <directive>RewriteRule</directive> g&eacute;n&egrave;re une redirection
- interne (ce qui arrive fr&eacute;quemment lors d'une r&eacute;&eacute;criture dans
- un contexte de r&eacute;pertoire), la requ&ecirc;te sera r&eacute;inject&eacute;e et le
- processus de r&eacute;&eacute;criture sera r&eacute;it&eacute;r&eacute; &agrave; partir de la
- premi&egrave;re directive <directive>RewriteRule</directive>.</dd>
-
- <dt>'<code>next|N</code>'
- (prochain round)</dt><dd>
- Relance le processus de r&eacute;&eacute;criture (toujours &agrave; partir de la
- premi&egrave;re r&egrave;gle). Cette fois, l'URL &agrave; comparer n'est plus l'URL
- originale, mais plut&ocirc;t l'URL renvoy&eacute;e par la derni&egrave;re r&egrave;gle de
- r&eacute;&eacute;criture. Ce drapeau est &eacute;quivalent &agrave; la commande Perl
- <code>next</code> ou la commande C <code>continue</code>. Il
- permet de red&eacute;marrer le processus de r&eacute;&eacute;criture - en se
- positionnant imm&eacute;diatement au niveau de la premi&egrave;re r&egrave;gle.
- <strong>Prenez garde &agrave; ne pas cr&eacute;er de bouclage
- infini !</strong></dd>
-
- <dt>'<code>nocase|NC</code>'
- (insensible &agrave; la casse)</dt><dd>
- Ce drapeau rend le <em>Mod&egrave;le</em> insensible &agrave; la casse,
- c'est &agrave; dire ne tenant pas compte des majuscules/minuscules
- lorsque le <em>Mod&egrave;le</em> est compar&eacute; avec l'URL
- courante.</dd>
-
- <dt>
- '<code>noescape|NE</code>'
- (pas d'&eacute;chappement de l'URI en sortie)</dt><dd>
- Ce drapeau emp&ecirc;che mod_rewrite d'appliquer les r&egrave;gles
- d'&eacute;chappement d'URI usuelles au r&eacute;sultat d'une r&eacute;&eacute;criture.
- Normalement, les caract&egrave;re sp&eacute;ciaux (comme '%', '$', ';',
- etc...) sont &eacute;chapp&eacute;s en leurs &eacute;quivalents hexad&eacute;cimaux
- (respectivement '%25', '%24', et '%3B') ; ce drapeau emp&ecirc;che
- cela de se produire. Il permet au symbole '%' d'appara&icirc;tre
- en sortie, comme dans
-<example>
- RewriteRule ^/foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
-</example>
- qui remplacerait '<code>/foo/zed</code>' par la requ&ecirc;te plus
- sure '<code>/bar?arg=P1=zed</code>'.
- </dd>
-
- <dt>
- '<code>nosubreq|NS</code>'
- (sous-requ&ecirc;tes non concern&eacute;es)</dt><dd>
- <p>Si ce drapeau est pr&eacute;sent, le moteur de r&eacute;&eacute;criture
- n'applique pas la r&egrave;gle si la requ&ecirc;te courante est une
- sous-requ&ecirc;te interne. Par exemples, des sous-requ&ecirc;tes sont
- g&eacute;n&eacute;r&eacute;es en interne par Apache lorsque
- <module>mod_dir</module> essaie de trouver des
- informations &agrave; propos d'&eacute;ventuels fichiers de r&eacute;pertoire par
- d&eacute;faut (fichiers <code>index.xxx</code>). Dans le cas d'une
- sous-requ&ecirc;te, ce n'est pas toujours utile, et peut m&ecirc;me
- provoquer des erreurs si l'ensemble du jeu de r&egrave;gles est
- appliqu&eacute;. Ce drapeau permet d'exclure certaines r&egrave;gles.</p>
- <p>Pour d&eacute;terminer si l'on doit appliquer une r&egrave;gle ou pas,
- si une URL est pr&eacute;fix&eacute;e par un script CGI, pour forcer son
- traitement par le script CGI, vous allez probablement
- rencontrer des probl&egrave;mes (ou tout du moins une surcharge
- significative) avec les sous-requ&ecirc;tes. Dans ce cas,
- utilisez ce drapeau</p>
- </dd>
-
- <dt>
- '<code>proxy|P</code>' (impose le mandataire)</dt><dd>
- Ce drapeau force l'envoi de la partie substitution en
- interne en tant que requ&ecirc;te mandataire, et (le processus de
- r&eacute;&eacute;criture s'arr&ecirc;te ici) son envoi imm&eacute;diat vers le <a
- href="mod_proxy.html">module proxy</a>. Vous devez vous
- assurer que la cha&icirc;ne de substitution est un URI valide
- (d&eacute;butant typiquement par
- <code>http://</code><em>nom d'h&ocirc;te</em>) pouvant &ecirc;tre trait&eacute;e
- par le module proxy d'Apache. Si ce n'est pas le cas, le
- module proxy vous renverra une erreur. Utilisez ce drapeau
- pour impl&eacute;menter de mani&egrave;re plus puissante la directive <a
- href="mod_proxy.html#proxypass">ProxyPass</a>, pour mettre
- en correspondance un contenu distant dans l'espace de
- nommage du serveur local.
-
- <p>Note: <module>mod_proxy</module> doit &ecirc;tre activ&eacute; pour
- pouvoir utiliser ce drapeau..</p>
- </dd>
-
- <dt>
- '<code>passthrough|PT</code>'
- (passage au gestionnaire suivant)</dt><dd>
- Ce drapeau force le moteur de r&eacute;&eacute;criture &agrave; affecter
- la valeur du champ <code>filename</code> au
- champ <code>uri</code> de la structure interne
- <code>request_rec</code>. Ce drapeau n'est qu'une astuce
- permettant un traitement suppl&eacute;mentaire de la sortie des
- directives <code>RewriteRule</code>, en utilisant
- <code>Alias</code>, <code>ScriptAlias</code>,
- <code>Redirect</code>, ou d'autres directives en provenance
- de divers traducteurs URI/nom de fichier. Par exemple, pour
- r&eacute;&eacute;crire <code>/abc</code> vers <code>/def</code> avec
- <module>mod_rewrite</module>, puis <code>/def</code> vers
- <code>/ghi</code> avec <module>mod_alias</module> :
-<example>
- RewriteRule ^/abc(.*) /def$1 [PT]<br />
- Alias /def /ghi
-</example>
- Si le drapeau <code>PT</code> est omis,
- <code>mod_rewrite</code> va r&eacute;&eacute;crire
- <code>uri=/abc/...</code> vers <code>filename=/def/...</code>
- comme tout traducteur URI/nom de fichier compatible avec
- l'API doit le faire. Puis, <code>mod_alias</code> va tenter
- une transition URI vers nom de fichier, et va &eacute;chouer.
-
- <p>Note: <strong>Vous devez utiliser ce drapeau si vous
- voulez m&eacute;langer des directives en provenance de diff&eacute;rents
- modules qui effectuent une traduction
- URL/nom de fichier</strong>. Un exemple typique est
- l'utilisation conjointe de <module>mod_alias</module> et de
- <module>mod_rewrite</module>.</p>
-
- <p>Le drapeau <code>PT</code> rend implicite la pr&eacute;sence du
- drapeau <code>L</code> flag : la r&eacute;&eacute;criture sera stopp&eacute;e afin
- de transmettre la requ&ecirc;te &agrave; la phase suivante du
- traitement.</p>
- </dd>
-
- <dt>'<code>qsappend|QSA</code>'
- (ajout d'une cha&icirc;ne de requ&ecirc;te - query string)</dt><dd>
- Ce drapeau force le moteur de r&eacute;&eacute;criture &agrave; ajouter la cha&icirc;ne
- de substitution &agrave; la cha&icirc;ne de requ&ecirc;te au lieu de remplacer
- cette derni&egrave;re par la cha&icirc;ne de substitution.
- Vous pouvez ainsi ajouter des donn&eacute;es &agrave; la cha&icirc;ne de requ&ecirc;te
- via une r&egrave;gle de r&eacute;&eacute;criture.</dd>
-
- <dt>'<code>redirect|R</code>
- [=<em>code</em>]' (force une <a id="redirect"
- name="redirect">redirection</a>)</dt><dd>
- <p>Pr&eacute;fixe la <em>cha&icirc;ne de substitution</em> par
- <code>http://h&ocirc;te[:port]/</code> (ce qui fait de la nouvelle
- URL un URI) pour forcer une redirection externe. Si aucun
- <em>code</em> n'est d&eacute;fini, une r&eacute;ponse HTTP 302 (MOVED
- TEMPORARILY) sera renvoy&eacute;e. Si vous voulez renvoyer un autre
- code de r&eacute;ponse, sp&eacute;cifiez simplement le nombre appropri&eacute; ou
- utilisez un des noms symboliques suivants : <code>temp</code>
- (d&eacute;faut), <code>permanent</code> ou <code>seeother</code>.
- Vous pouvez utiliser ce drapeau pour que les r&egrave;gles mettent
- l'URL sous forme canonique et la renvoient au client, pour
- traduire ``<code>/~</code>'' en ``<code>/u/</code>'', ou pour
- ajouter syst&eacute;matiquement un slash &agrave;
- <code>/u/</code><em>utilisateur</em>, etc...<br />
- <strong>Note:</strong> Si vous utilisez ce drapeau,
- assurez-vous que le champ de substitution est une URL
- valide ! Si ce n'est pas le cas, vous serez redirig&eacute; vers
- une URL invalide. Souvenez-vous que, s'il est seul, ce
- drapeau va seulement pr&eacute;fixer l'URL par
- <code>http://h&ocirc;te[:port]/</code>, et que le processus de
- r&eacute;&eacute;criture va se poursuivre. En g&eacute;n&eacute;ral, vous voudrez plut&ocirc;t
- stopper la r&eacute;&eacute;criture &agrave; ce point, et rediriger imm&eacute;diatement.
- Pour stopper la r&eacute;&eacute;criture, vous pouvez ajouter le drapeau
- 'L'.</p>
- <p>Bien qu'on utilise en g&eacute;n&eacute;ral ce drapeau pour les
- redirections, on peut sp&eacute;cifier tout code de statut valide.
- Si le code de statut est en dehors de la gamme des codes de
- redirection (300-399), la cha&icirc;ne de <em>Substitution</em> est
- supprim&eacute;e et le processus de r&eacute;&eacute;criture stopp&eacute; comme si le
- drapeau <code>L</code> &eacute;tait pr&eacute;sent.</p>
- </dd>
-
- <dt>'<code>skip|S</code>=<em>num</em>'
- (saute la/les r&egrave;gle(s) suivantes)</dt><dd>
- Ce drapeau force le moteur de r&eacute;&eacute;criture &agrave; sauter les
- <em>num</em> r&egrave;gles cons&eacute;cutives suivantes, si la r&egrave;gle courante
- s'applique. Il permet de simuler une structure if-then-else : la
- derni&egrave;re r&egrave;gle du bloc "then" devient <code>skip=N</code>, o&ugrave; N
- est le nombre de r&egrave;gles contenues dans le bloc "else" (ce qui est
- un comportement diff&eacute;rent de celui du drapeau 'chain|C' !).</dd>
-
- <dt>
- '<code>type|T</code>=<em>type MIME</em>'
- (force le type MIME)</dt><dd>
- Force le <glossary>type MIME</glossary> du fichier cible &agrave;
- <em>type MIME</em>. Ceci permet de d&eacute;finir le type de contenu
- en fonction de certaines conditions.
- Dans un contexte de r&eacute;pertoire, utilisez exclusivement
- <code>-</code> (tiret) comme substitution, faute de quoi le
- type MIME d&eacute;fini &agrave; l'aide de ce drapeau sera perdu &agrave; cause d'un
- rejeu du traitement en interne.</dd>
- </dl>
-
-
+ &ecirc;tre choisis dans la table suivante. Vous trouverez plus de
+ d&eacute;tails, et des exemples pour chaque drapeau dans le <a
+ href="../rewrite/flags.html">document &agrave; propos des drapeaux de
+ r&eacute;&eacute;criture.</a></p>
+
+ <table border="1">
+ <tr><th>Drapeaux et syntaxe</th>
+ <th>Fonction</th>
+ </tr>
+ <tr>
+ <td>B</td>
+ <td>Echappe les caract&egrave;res non-alphanum&eacute;riques <em>avant</em>
+ d'appliquer la transformation. <em><a
+ href="../rewrite/flags.html#flag_b">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>chain|C</td>
+ <td>La r&egrave;gle est cha&icirc;n&eacute;e avec la r&egrave;gle suivante. Si la r&egrave;gle
+ &eacute;choue, la ou les r&egrave;gles avec lesquelles elle est est cha&icirc;n&eacute;e
+ seront saut&eacute;es. <em><a
+ href="../rewrite/flags.html#flag_c">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
+ <td>D&eacute;finit un cookie au niveau du navigateur client. La syntaxe
+ compl&egrave;te est :
+ CO=<em>NAME</em>:<em>VAL</em>[:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]]]
+ <em><a href="../rewrite/flags.html#flag_co">d&eacute;tails ...</a></em>
+ </td>
+ </tr>
+ <tr>
+ <td>discardpathinfo|DPI</td>
+ <td>Supprime la partie PATH_INFO de l'URI r&eacute;&eacute;crit. <em><a
+ href="../rewrite/flags.html#flag_dpi">d&eacute;tails
+ ...</a></em></td>
+ </tr>
+ <tr>
+ <td>env|E=<em>VAR</em>[:<em>VAL</em>]</td>
+ <td>D&eacute;finit la variable d'environnement <em>VAR</em> (&agrave; la valeur
+ <em>VAL</em> si elle est fournie). <em><a
+ href="../rewrite/flags.html#flag_e">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>forbidden|F</td>
+ <td>Renvoie une r&eacute;ponse 403 FORBIDDEN au navigateur client.
+ <em><a href="../rewrite/flags.html#flag_f">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>gone|G</td>
+ <td>Renvoie un message d'erreur 410 GONE au navigateur client. <em><a
+ href="../rewrite/flags.html#flag_g">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>Handler|H=<em>Gestionnaire de contenu</em></td>
+ <td>L'URI r&eacute;sultant est envoy&eacute; au <em>Gestionnaire de
+ contenu</em> pour traitement. <em><a
+ href="../rewrite/flags.html#flag_h">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>last|L</td>
+ <td>Arr&ecirc;te le processus de r&eacute;&eacute;criture imm&eacute;diatement et n'applique
+ plus aucune r&egrave;gle. Pr&ecirc;tez une attention particuli&egrave;re aux mises
+ en garde concernant les contextes de niveau r&eacute;pertoire et
+ .htaccess (voir aussi le drapeau END). <em><a
+ href="../rewrite/flags.html#flag_l">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>next|N</td>
+ <td>R&eacute;ex&eacute;cute le processus de r&eacute;&eacute;criture &agrave; partir de la premi&egrave;re
+ r&egrave;gle, en utilisant le r&eacute;sultat du jeu de r&egrave;gles, sous r&eacute;serve
+ qu'il y ait un point de d&eacute;part. <em><a
+ href="../rewrite/flags.html#flag_n">d&eacute;tails
+ ...</a></em></td>
+ </tr>
+ <tr>
+ <td>nocase|NC</td>
+ <td>Rend la comparaison entre mod&egrave;les insensible &agrave; la casse.
+ <em><a href="../rewrite/flags.html#flag_nc">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>noescape|NE</td>
+ <td>Emp&ecirc;che mod_rewrite d'effectuer un &eacute;chappement hexad&eacute;cimal
+ des caract&egrave;res sp&eacute;ciaux dans le r&eacute;sultat de la r&eacute;&eacute;criture. <em><a
+ href="../rewrite/flags.html#flag_ne">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>nosubreq|NS</td>
+ <td>La r&egrave;gle est saut&eacute;e si la requ&ecirc;te courante est une
+ sous-requ&ecirc;te interne. <em><a
+ href="../rewrite/flags.html#flag_ns">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>proxy|P</td>
+ <td>Force l'envoi en interne de l'URL de substitution en tant
+ que requ&ecirc;te mandataire. <em><a
+ href="../rewrite/flags.html#flag_p">d&eacute;tails
+ ...</a></em></td>
+ </tr>
+ <tr>
+ <td>passthrough|PT</td>
+ <td>L'URI r&eacute;sultant est repass&eacute; au moteur de mise en
+ correspondance des URLs pour y &ecirc;tre trait&eacute; par d'autres
+ traducteurs URI-vers-nom de fichier, comme <code>Alias</code> ou
+ <code>Redirect</code>. <em><a
+ href="../rewrite/flags.html#flag_pt">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>qsappend|QSA</td>
+ <td>Ajoute toute cha&icirc;ne de param&egrave;tres cr&eacute;&eacute;e dans la cible de
+ r&eacute;&eacute;criture &agrave; toute cha&icirc;ne de param&egrave;tres pr&eacute;sente dans l'URL de la
+ requ&ecirc;te originale. <em><a
+ href="../rewrite/flags.html#flag_qsa">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>qsdiscard|QSD</td>
+ <td>Supprime toute cha&icirc;ne de param&egrave;tres de l'URI entrant. <em><a
+ href="../rewrite/flags.html#flag_qsd">d&eacute;tails
+ ...</a></em></td>
+ </tr>
+ <tr>
+ <td>redirect|R[=<em>code</em>]</td>
+ <td>Force une redirection externe, avec un code de statut HTTP
+ optionnel. <em><a
+ href="../rewrite/flags.html#flag_r">d&eacute;tails ...</a></em>
+ </td>
+ </tr>
+ <tr>
+ <td>END</td>
+ <td>Arr&ecirc;te le processus de r&eacute;&eacute;criture imm&eacute;diatement et
+ n'applique plus aucune r&egrave;gle. Emp&ecirc;che aussi l'ex&eacute;cution
+ ult&eacute;rieure de r&egrave;gles de r&eacute;&eacute;criture dans des contextes de
+ r&eacute;pertoire et des fichiers .htaccess (disponible depuis la
+ version 2.3.9) <em><a
+ href="../rewrite/flags.html#flag_l">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>skip|S=<em>nombre</em></td>
+ <td>Si la r&egrave;gle courante s'applique, le moteur de r&eacute;&eacute;criture
+ doit sauter les <em>nombre</em> r&egrave;gles suivantes. <em><a
+ href="../rewrite/flags.html#flag_s">d&eacute;tails ...</a></em></td>
+ </tr>
+ <tr>
+ <td>tyle|T=<em>Type-MIME</em></td>
+ <td>Force l'attribution du <glossary>Type-MIME</glossary>
+ sp&eacute;cifi&eacute; au fichier cible. <em><a
+ href="../rewrite/flags.html#flag_t">d&eacute;tails ...</a></em></td>
+ </tr>
+ </table>
+
<note><title>D&eacute;veloppement du r&eacute;pertoire home</title>
<p> Quand la cha&icirc;ne de substitution commence par quelque chose comme
"/~user" (de mani&egrave;re explicite ou par r&eacute;f&eacute;rences arri&egrave;res), mod_rewrite
@@ -1772,40 +1291,73 @@ d'aucune utilit&eacute; et n'est pas support&eacute;.</p>
/chemin/infochemin</code>'':</strong><br />
</p>
-<note><pre>
-<strong>R&egrave;gle</strong> <strong>R&eacute;sultat de la substitution</strong>
----------------------------------------------- ----------------------------------
-^/chemin(.*) autre-chemin$1 non valide, non support&eacute;
-
-^/chemin(.*) autre-chemin$1 [R] non valide, non support&eacute;
-
-^/chemin(.*) autre-chemin$1 [P] non valide, non support&eacute;
----------------------------------------------- ----------------------------------
-^/chemin(.*) /autre-chemin$1 /autre-chemin/infochemin
-
-^/chemin(.*) /autre-chemin$1 [R] http://cet-h&ocirc;te/autre-chemin/infochemin
- via redirection externe
-
-^/chemin(.*) /autre-chemin$1 [P] n'a pas lieu d'&ecirc;tre, non support&eacute;
----------------------------------------------- ----------------------------------
-^/chemin(.*) http://cet-h&ocirc;te/autre-chemin$1 /autre-chemin/infochemin
-
-^/chemin(.*) http://cet-h&ocirc;te/autre-chemin$1 [R] http://cet-h&ocirc;te/autre-chemin/infochemin
- via redirection externe
-
-^/chemin(.*) http://cet-h&ocirc;te/autre-chemin$1 [P] n'a pas lieu d'&ecirc;tre, non support&eacute;
----------------------------------------------- ----------------------------------
-^/chemin(.*) http://autre h&ocirc;te/autre-chemin$1 http://autre h&ocirc;te/autre-chemin/infochemin
- via redirection externe
-
-^/chemin(.*) http://autre h&ocirc;te/autre-chemin$1 [R] http://autre h&ocirc;te/autre-chemin/infochemin
- via redirection externe
- (le drapeau [R] est
- redondant)
-
-^/chemin(.*) http://autre h&ocirc;te/autre-chemin$1 [P] http://autre h&ocirc;te/autre-chemin/infochemin
- via un mandataire interne
-</pre></note>
+<table border="1">
+<tr>
+<th>R&egrave;gle</th>
+<th>R&eacute;sultat de la substitution</th>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) autre_chemin$1</td>
+<td>invalide, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) autre_chemin$1 [R]</td>
+<td>invalide, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) autre_chemin$1 [P]</td>
+<td>invalide, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) /autre_chemin$1</td>
+<td>/autre_chemin/info_chemin</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) /autre_chemin$1 [R]</td>
+<td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) /autre_chemin$1 [P]</td>
+<td>sans objet, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) http://cet_hote/autre_chemin$1</td>
+<td>/autre_chemin/info_chemin</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [R]</td>
+<td>http://cet_hote/autre_chemin/info_chemin via une redirection externe</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) http://cet_hote/autre_chemin$1 [P]</td>
+<td>sans objet, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) http://autre_hote/autre_chemin$1</td>
+<td>http://autre_hote/autre_chemin/info_chemin via une redirection externe</td>
+</tr>
+
+<tr>
+<td>^/un_chemin(.*) http://autre_hote/autre_chemin$1 [R]</td>
+<td>http://autre_hote/autre_chemin/info_chemin (le drapeau [R] est
+redondant)</td>
+</tr>
+
+<tr>
+<td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
+<td>http://otherhost/otherpath/pathinfo via internal proxy</td>
+</tr>
+</table>
<p><strong>Dans une configuration de niveau r&eacute;pertoire pour
<code>/chemin</code><br />
@@ -1815,41 +1367,77 @@ d'aucune utilit&eacute; et n'est pas support&eacute;.</p>
/chemin/chemin-local/infochemin</code>'':</strong><br />
</p>
-<note><pre>
-<strong>R&egrave;gle</strong> <strong>R&eacute;sultat de la substitution</strong>
----------------------------------------------- ----------------------------------
-^chemin-local(.*) autre-chemin$1 /chemin/autre-chemin/infochemin
-
-^chemin-local(.*) autre-chemin$1 [R] http://cet-h&ocirc;te/chemin/autre-chemin/infochemin
- via redirection externe
-
-^chemin-local(.*) autre-chemin$1 [P] n'a pas lieu d'&ecirc;tre, non support&eacute;
----------------------------------------------- ----------------------------------
-^chemin-local(.*) /autre-chemin$1 /autre-chemin/infochemin
-
-^chemin-local(.*) /autre-chemin$1 [R] http://cet-h&ocirc;te/autre-chemin/infochemin
- via redirection externe
-
-^chemin-local(.*) /autre-chemin$1 [P] n'a pas lieu d'&ecirc;tre, non support&eacute;
----------------------------------------------- ----------------------------------
-^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1 /autre-chemin/infochemin
-
-^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1 [R] http://cet-h&ocirc;te/autre-chemin/infochemin
- via redirection externe
-
-^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1 [P] n'a pas lieu d'&ecirc;tre, non support&eacute;
----------------------------------------------- ----------------------------------
-^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1 http://autre h&ocirc;te/autre-chemin/infochemin
- via redirection externe
-
-^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1 [R] http://autre h&ocirc;te/autre-chemin/infochemin
- via redirection externe
- (le drapeau [R] est
- redondant)
+<table border="1">
+
+<tr>
+<th>R&egrave;gle</th>
+<th>R&eacute;sultat de la substitution</th>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) autre-chemin$1</td>
+<td>/chemin/autre-chemin/infochemin</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) autre-chemin$1 [R]</td>
+<td>http://cet-h&ocirc;te/chemin/autre-chemin/infochemin via redirection
+externe</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) autre-chemin$1 [P]</td>
+<td>n'a pas lieu d'&ecirc;tre, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) /autre-chemin$1</td>
+<td>/autre-chemin/infochemin</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) /autre-chemin$1 [R]</td>
+<td>http://cet-h&ocirc;te/autre-chemin/infochemin via redirection externe</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) /autre-chemin$1 [P]</td>
+<td>n'a pas lieu d'&ecirc;tre, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1</td>
+<td>/autre-chemin/infochemin</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1 [R]</td>
+<td>http://cet-h&ocirc;te/autre-chemin/infochemin via redirection externe</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) http://cet-h&ocirc;te/autre-chemin$1 [P]</td>
+<td>n'a pas lieu d'&ecirc;tre, non support&eacute;</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1</td>
+<td>http://autre h&ocirc;te/autre-chemin/infochemin via redirection externe</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1 [R]</td>
+<td>http://autre h&ocirc;te/autre-chemin/infochemin via redirection externe
+(le drapeau [R] est redondant)</td>
+</tr>
+
+<tr>
+<td>^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1 [P]</td>
+<td>http://autre h&ocirc;te/autre-chemin/infochemin via un mandataire interne</td>
+</tr>
+
+</table>
-^chemin-local(.*) http://autre h&ocirc;te/autre-chemin$1 [P] http://autre h&ocirc;te/autre-chemin/infochemin
- via un mandataire interne
-</pre></note>
</usage>
</directivesynopsis>
</modulesynopsis>