1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
|
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
<!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>Utilisation de RewriteMap - Serveur HTTP Apache Version 2.5</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
<p class="apache">Serveur HTTP Apache Version 2.5</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Rewrite</a></div><div id="page-content"><div id="preamble"><h1>Utilisation de RewriteMap</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/rewritemap.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/rewritemap.html" title="Français"> fr </a></p>
</div>
<p>Ce document est un complément à la <a href="../mod/mod_rewrite.html">documentation de référence</a> du
module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Il décrit l'utilisation de la
directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>, et
fournit des exemples pour chacun des différents types de
<code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>.</p>
<div class="warning">Notez que la plupart de ces exemples ne
fonctionneront pas en l'état dans le contexte de votre configuration
particulière ; vous devez donc vous attacher à les
comprendre, plutôt que de simplement les insérer dans votre
configuration par copier/coller.</div>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#int">int: fonction interne</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#txt">txt: tables de correspondances au format texte</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#rnd">rnd: Fichier texte à valeurs de substitution multiples
choisies de manière aléatoire</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#dbm">dbm: Fichier condensé DBM</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#prg">prg: Programme de réécriture externe</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#dbd">dbd ou fastdbd: requête SQL</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#summary">Résumé</a></li>
</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../mod/mod_rewrite.html">Documentation du module
mod_rewrite</a></li><li><a href="intro.html">Introduction à mod_rewrite</a></li><li><a href="remapping.html">Redirection et remise en
correspondance</a></li><li><a href="access.html">Contrôle d'accès</a></li><li><a href="vhosts.html">Serveurs virtuels</a></li><li><a href="proxy.html">Mise en cache</a></li><li><a href="advanced.html">Techniques avancées</a></li><li><a href="avoid.html">Quand ne pas utiliser mod_rewrite</a></li><li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="introduction" id="introduction">Introduction</a><a title="Lien permanent" href="#introduction" class="permalink">¶</a></h2>
<p>
La directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
définit une fonction externe qui peut être appelée depuis une
directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ou
<code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> pour
accomplir une réécriture trop compliquée, ou trop spécialisée pour
être effectuée à partir d'expressions rationnelles. Vous trouverez
ci-dessous les différents types disponibles pour la source de
données, ceux-ci étant par ailleurs énumérés dans la documentation de
référence de <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>.</p>
<p>La syntaxe de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> est la suivante :</p>
<pre class="prettyprint lang-config">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em></pre>
<p>L'argument <a id="mapfunc" name="mapfunc"><em>MapName</em></a>
est un nom arbitraire que vous associez à la table de
correspondances, et que vous
pourrez utilisez par la suite dans les directives de réécriture. Les
recherches dans la table de correspondance s'effectuent en
respectant cette syntaxe :</p>
<p class="indent">
<strong>
<code>${</code> <em>nom-map</em> <code>:</code>
<em>clé-recherche</em>
<code>}</code> <br /> <code>${</code> <em>nom-map</em> <code>:</code>
<em>clé-recherche</em> <code>|</code> <em>DefaultValue</em> <code>}</code>
</strong>
</p>
<p>Lorsque cette syntaxe est employée, la table de correspondances
<em>nom-map</em> est consultée et la clé <em>clé-recherche</em>
recherchée. Si la clé est trouvée, la fonction de recherche dans la
table de correspondance est remplacée par <em>SubstValue</em>, ou
par <em>DefaultValue</em> dans le cas contraire, ou par la chaîne
vide si aucune <em>DefaultValue</em> n'a été spécifiée.</p>
<p>Par exemple, vous pouvez définir une directive
<code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> comme suit :</p>
<pre class="prettyprint lang-config">RewriteMap examplemap "txt:/path/to/file/map.txt"</pre>
<p>Vous pourrez par la suite utiliser cette table de correspondances
dans une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> comme suit :</p>
<pre class="prettyprint lang-config">RewriteRule "^/ex/(.*)" "${examplemap:$1}"</pre>
<p>Il est possible de spécifier une valeur par défaut qui sera utilisée
si la recherche dans la table de correspondances est infructueuse :</p>
<pre class="prettyprint lang-config">RewriteRule "^/ex/(.*)" "${examplemap:$1|/not_found.html}"</pre>
<div class="note"><h3>Contexte de répertoire et fichiers.htaccess</h3>
<p>
Vous ne pouvez utilisez la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> ni dans
les sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, ni dans les fichiers
<code>.htaccess</code>. Vous devez déclarer la table de correspondances
au niveau du serveur principal ou dans un contexte de serveur virtuel.
Par contre, si vous ne pouvez pas déclarer la table dans une section
<Directory> ou dans un fichier <code>.htaccess</code>, vous
pourrez y faire référence dans ces contextes, une fois cette table
créée.
</p>
</div>
<p>Les sections suivantes décrivent les différents types de tables de
correspondances <em>type-map</em> disponibles, et fournissent des
exemples pour chacun d'entre eux.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="int" id="int">int: fonction interne</a><a title="Lien permanent" href="#int" class="permalink">¶</a></h2>
<p>Quand le type de table <code>int</code> est spécifié, la
correspondance s'effectue via une des fonctions internes <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> disponibles. Les
développeurs de modules peuvent fournir des fonctions internes
supplémentaires en les enregistrant via l'API
<code>ap_register_rewrite_mapfunc</code>. Les fonctions fournies par
défaut sont :
</p>
<ul>
<li><strong>toupper</strong>:<br />
Met la clé en majuscules.</li>
<li><strong>tolower</strong>:<br />
Met la clé en minuscules.</li>
<li><strong>escape</strong>:<br />
Remplace les caractères spéciaux de la clé en codes
hexadécimaux.</li>
<li><strong>unescape</strong>:<br />
Reconvertit les codes hexadécimaux de la clé en caractères
spéciaux.</li>
</ul>
<p>
Pour utiliser une de ces fonctions, créez une
<code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> qui référence la
fonction interne, et insérez-la dans votre <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> :
</p>
<p> <strong>Redirection d'un URI vers une version en minuscules
d'elle-même</strong></p>
<pre class="prettyprint lang-config">RewriteMap lc int:tolower
RewriteRule "(.*)" "${lc:$1}" [R]</pre>
<div class="note">
<p>Notez que cet exemple n'est présenté ici qu'à titre
d'illustration et ne constitue pas une recommandation. Si vous
voulez rendre les URLs insensibles à la casse, utiliser plutôt le
module <code class="module"><a href="../mod/mod_speling.html">mod_speling</a></code>.
</p>
</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="txt" id="txt">txt: tables de correspondances au format texte</a><a title="Lien permanent" href="#txt" class="permalink">¶</a></h2>
<p>Lorsqu'un type-map <code>txt</code> est utilisé, la source-map
est un chemin du système de fichiers vers un fichier de
correspondances au format texte, contenant sur chaque ligne une
paire clé/valeur séparées par un espace. Il est possible d'insérer
des commentaires sous la forme de chaînes commençant par le caractère
'#'.</p>
<p>Un fichier de correspondances au format texte valide possèdera la
syntaxe suivante :</p>
<div class="example"><p><code>
# Ligne de commentaires<br />
<strong><em>clé</em> <em>valeur-substitution</em></strong><br />
<strong><em>clé</em> <em>valeur-substitution</em></strong> # commentaire<br />
</code></p></div>
<p>Lorsque la table de correspondance fait l'objet d'une recherche,
la valeur spécifiée est recherchée dans le premier champ, et si elle
est trouvée, la valeur de substitution est renvoyée.</p>
<p>Par exemple, nous pourrions utiliser un fichier de
correspondances pour traduire des noms de produits en identifiants
produits pour obtenir des URLs plus simples à mémoriser, en
utilisant la recette suivante :</p>
<p><strong>Product to ID configuration</strong></p>
<pre class="prettyprint lang-config">RewriteMap product2id "txt:/etc/apache2/productmap.txt"
RewriteRule "^/product/(.*)" "/prods.php?id=${product2id:$1|NOTFOUND}" [PT]</pre>
<p>Nous supposons ici que le script <code>prods.php</code> sait quoi
faire lorsqu'il reçoit un argument <code>id=NON-TROUVE</code>, dans
le cas où le produit ne se trouve pas dans la table de
correspondances.</p>
<p>Le fichier <code>/etc/apache2/map-produit.txt</code> contient ce
qui suit :</p>
<div class="example"><h3>Fichier de correspondances Produit - Identifiant</h3><p><code>
##<br />
## map-produit.txt - Fichier de correspondances Produit - Identifiant<br />
##<br />
<br />
TELEVISION 993<br />
STEREO 198<br />
CANNE-A-PECHE 043<br />
BALLON-BASKET 418<br />
TELEPHONE 328
</code></p></div>
<p>Ainsi, lorsqu'une requête pour
<code>http://example.com/produit/TELEVISION</code> arrive, la directive
<code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> s'applique, et la
requête est transformée en interne en <code>/prods.php?id=993</code>.</p>
<div class="note"><h3>Note: fichiers .htaccess</h3>
L'exemple donné est conçu pour être utilisé dans un contexte de
serveur principal ou de serveur virtuel. Si vous voulez l'utiliser
dans un fichier <code>.htaccess</code>, vous devrez supprimer le
slash de début dans le modèle de réécriture afin que ce dernier
puisse correspondre à toute URL :
<pre class="prettyprint lang-config">RewriteRule "^product/(.*)" "/prods.php?id=${product2id:$1|NOTFOUND}" [PT]</pre>
</div>
<div class="note"><h3>Recherches mises en cache</h3>
<p>
Les clés de recherche sont mises en cache par httpd jusqu'à ce que
le <code>mtime</code> (date de modification) du fichier de
correspondances soit modifié, ou que le serveur httpd soit
redémarré, ce qui améliore les performances pour les tables de
correspondances consultées par de nombreuses requêtes.
</p>
</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="rnd" id="rnd">rnd: Fichier texte à valeurs de substitution multiples
choisies de manière aléatoire</a><a title="Lien permanent" href="#rnd" class="permalink">¶</a></h2>
<p>Lorsque le type-map spécifié est <code>rnd</code>, la source est
un chemin du système de fichiers vers un fichier de correspondances
au format texte dont chaque ligne contient une clé, et une ou
plusieurs valeurs séparées par le caractère <code>|</code>. Si une
clé convient, une des valeurs correspondantes sera choisie de
manière aléatoire.</p>
<p>Par exemple, vous pouvez utiliser le fichier de correspondances
et les directives suivants pour implémenter une répartition de
charge aléatoire entre plusieurs serveurs d'arrière-plan, par
l'intermédiaire d'un mandataire inverse. Les images sont envoyées
vers un des serveurs de l'ensemble 'statique', tandis que tout le
reste est envoyé vers un des serveurs de l'ensemble 'dynamique'.</p>
<div class="example"><h3>Fichier de correspondances</h3><p><code>
##<br />
## map.txt -- table de réécriture<br />
##<br />
<br />
statique www1|www2|www3|www4<br />
dynamique www5|www6
</code></p></div>
<p><strong>Configuration directives</strong></p>
<pre class="prettyprint lang-config">RewriteMap servers "rnd:/path/to/file/map.txt"
RewriteRule "^/(.*\.(png|gif|jpg))" "http://${servers:static}/$1" [NC,P,L]
RewriteRule "^/(.*)" "http://${servers:dynamic}/$1" [P,L]</pre>
<p>Ainsi, lorsqu'une image est demandée et que la première règle
convient, <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> recherche la chaîne
<code>statique</code> dans le fichier de correspondances qui
renvoie un des noms de serveurs spécifiés de manière aléatoire,
ce dernier étant utilisé dans la cible de la règle
<code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>.</p>
<p>Si vous voulez qu'un des serveurs soit plus souvent sollicité que
les autres (par exemple s'il possède plus de mémoire, et peut donc
traiter d'avantage de requêtes), spécifiez-le plusieurs fois dans la
liste des serveurs.</p>
<div class="example"><p><code>
statique www1|www1|www2|www3|www4
</code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="dbm" id="dbm">dbm: Fichier condensé DBM</a><a title="Lien permanent" href="#dbm" class="permalink">¶</a></h2>
<p>Lorsque le type-map <code>dbm</code> est utilisé, la source est
un chemin du système de fichiers vers un fichier de données DBM
contenant des paires clé/valeur permettant d'effectuer la
correspondance. Le fonctionnement est identique à celui du type-map
<code>txt</code>, mais beaucoup plus rapide car un fichier DBM est
indexé, alors qu'un fichier texte ne l'est pas. L'accès à la clé
recherchée est donc plus rapide.</p>
<p>Vous pouvez éventuellement spécifier un type dbm particulier :</p>
<pre class="prettyprint lang-config">RewriteMap examplemap "dbm=sdbm:/etc/apache/mapfile.dbm"</pre>
<p>Ce type peut être choisi parmi <code>sdbm</code>, <code>gdbm</code>,
<code>ndbm</code> ou <code>db</code>. Il est
cependant recommandé d'utiliser l'utilitaire <a href="../programs/httxt2dbm.html">httxt2dbm</a> fourni avec le
serveur HTTP Apache, car il utilise la bibliothèque DBM appropriée,
à savoir celle qui a été utilisée lors de la compilation de httpd.</p>
<p>Pour créer un fichier dbm, créez tout d'abord un fichier de
correspondances au format texte comme décrit dans la section <a href="#txt">txt</a>. Traitez ensuite ce fichier avec
<code>httxt2dbm</code> :</p>
<div class="example"><p><code>
$ httxt2dbm -i fichier-map.txt -o fichier-map.map
</code></p></div>
<p>Vous pouvez alors faire référence au fichier obtenu dans votre
directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> :</p>
<pre class="prettyprint lang-config">RewriteMap mapname "dbm:/etc/apache/mapfile.map"</pre>
<div class="note">
<p>Notez qu'avec certains types dbm, plusieurs fichiers possédant le
même nom de base sont créés. Par exemple, vous pouvez obtenir deux
fichiers nommés <code>fichier-map.map.dir</code> et
<code>fichier-map.map.pag</code>. Ceci est tout à fait normal, et vous
ne devez utiliser que le nom de base <code>fichier-map.map</code> dans votre
directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>.</p>
</div>
<div class="note"><h3>Mise en cache des recherches</h3>
<p>
Les clés de recherche sont mises en cache par httpd jusqu'à ce que
le <code>mtime</code> (date de modification) du fichier de
correspondances soit modifié, ou que le serveur httpd soit
redémarré, ce qui améliore les performances pour les tables de
correspondances consultées par de nombreuses requêtes.
</p>
</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="prg" id="prg">prg: Programme de réécriture externe</a><a title="Lien permanent" href="#prg" class="permalink">¶</a></h2>
<p>Lorque le type-map <code>prg</code> est spécifié, la source est
un chemin du système de fichiers vers un programme exécutable
destiné à effectuer la mise en correspondance. Il peut s'agir d'un
fichier binaire compilé, ou d'un programme en langage interprété
comme Perl ou Python.</p>
<p>Ce programme est lancé une fois au démarrage du serveur HTTP
Apache, puis communique avec le moteur de réécriture via
<code>STDIN</code> et <code>STDOUT</code>. En d'autres termes, pour
chaque recherche de correspondance, il reçoit un argument via
<code>STDIN</code>, et doit renvoyer en guise de réponse une chaîne
terminée par un caractère nouvelle-ligne sur <code>STDOUT</code>. Si
la recherche de correspondance est infructueuse, le programme doit
l'indiquer en retournant la chaîne de quatre caractères
"<code>NULL</code>".</p>
<p>Les programmes de réécriture externes ne sont pas lancés s'il
n'ont pas été définis dans un contexte où la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriteengine">RewriteEngine</a></code> est définie à
<code>on</code>.</p>
<p>Par défaut, les programmes de réécriture externes s'exécutent sous
l'utilisateur/groupe qui a démarré httpd. Pour en changer, il est possible
sur les systèmes de style Unix de spécifier un autre couple
utilisateur/groupe via le troisième argument de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>, et ceci au format
<code>utilisateur:groupe</code>.</p>
<p>Cette fonctionnalité utilise le mutex <code>rewrite-map</code>
nécessaire à la fiabilité des communications avec le programme. Le
mécanisme de mutex et le fichier verrou peuvent être définis via la
directive <code class="directive"><a href="../mod/core.html#mutex">Mutex</a></code>.</p>
<p>Voici un exemple simple qui remplace tous les tirets par des
caractères de soulignement dans l'URI de la requête.</p>
<p><strong>Configuration de la réécriture</strong></p>
<pre class="prettyprint lang-config">RewriteMap d2u "prg:/www/bin/dash2under.pl" apache:apache
RewriteRule "-" "${d2u:%{REQUEST_URI}}"</pre>
<p><strong>dash2under.pl</strong></p>
<pre class="prettyprint lang-perl"> #!/usr/bin/perl
$| = 1; # Turn off I/O buffering
while (<STDIN>) {
s/-/_/g; # Remplace tous les tirets par des caractères de soulignement
print $_;
}</pre>
<div class="note"><h3>Mises en garde !</h3>
<ul>
<li>Votre programme doit être le plus
simple possible. Si le programme se bloque, httpd va attendre
indéfiniment une réponse de sa part, et par conséquent ne répondra plus
aux requêtes.</li>
<li>Assurez-vous de bien désactiver la mise en tampon dans votre
programme. En Perl, ceci est effectué à la seconde ligne du script de
l'exemple - <code>$| = 1;</code> - La syntaxe sera bien entendu
différente dans
d'autres langages. Si les entrées/sorties sont mises en tampon, httpd va
attendre une sortie, et va par conséquent se bloquer.</li>
<li>Rappelez-vous qu'il n'existe qu'une copie du programme lancé au
démarrage du serveur, et que toutes les requêtes vont devoir passer par
ce goulot d'étranglement. Ceci peut provoquer des ralentissements
significatifs si de nombreuses requêtes doivent être traitées, ou si le
script lui-même est très lent.</li>
</ul>
</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="dbd" id="dbd">dbd ou fastdbd: requête SQL</a><a title="Lien permanent" href="#dbd" class="permalink">¶</a></h2>
<p>Lorsque le type-map <code>dbd</code> ou <code>fastdbd</code> est
spécifié, la source est une requête SQL SELECT qui reçoit un
argument et renvoie une seule valeur.</p>
<p>Pour que cette requête puisse être exécutée,
<code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code> doit être configuré pour attaquer la base
de données concernée.</p>
<p>Ce type-map existe sous deux formes. Avec le type-map
<code>dbd</code>, la requête est exécutée à chaque demande, tandis
qu'avec le type-map <code>fastdbd</code>, les recherches dans la
base de données sont mises en cache en interne. <code>fastdbd</code>
est donc plus efficace et donc plus rapide ; par contre, il ne
tiendra pas compte des modifications apportées à la base de données
jusqu'à ce que le serveur soit redémarré.</p>
<p>Si une requête renvoie plusieurs enregistrements, un de ceux-ci
sera sélectionné aléatoirement.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">RewriteMap ma-requete "fastdbd:SELECT destination FROM rewrite WHERE source = %s"</pre>
</div>
<div class="note"><h3>Note</h3>
<p>Le nom de la requête est transmis au pilote de base de données en tant
que label pour une requête SQL préparée, et doit donc respecter toutes les
règles imposées par votre base de données (comme la sensibilité à la casse).</p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="summary" id="summary">Résumé</a><a title="Lien permanent" href="#summary" class="permalink">¶</a></h2>
<p>La directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> peut apparaître
plusieurs fois. Utilisez une directive
<code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code> pour chaque fonction de mise en
correspondance pour déclarer son fichier de correspondances.</p>
<p>Bien que l'on ne puisse pas <strong>déclarer</strong> de fonction
de mise en correspondance dans un contexte de répertoire (fichier
<code>.htaccess</code> ou section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>), il est
possible d'utiliser cette fonction dans un tel contexte.</p>
</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/rewrite/rewritemap.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/rewrite/rewritemap.html" title="Français"> fr </a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/rewrite/rewritemap.html';
(function(w, d) {
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
d.write('<div id="comments_thread"><\/div>');
var s = d.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
}
else {
d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
}
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2018 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
prettyPrint();
}
//--><!]]></script>
</body></html>
|