Actions
Les actions sont une notion liée à celle des handlers (cela n’a rien à voir avec l’attribut « Action » des formulaires HTML que nous avons vus précédemment). Elles passent des fichiers à un script CGI précis avant de les servir. La version 2 d’Apache dispose du mécanisme des « filtres », qui est un peu similaire.
Action
Action type script_cgi
Configuration du serveur, hôte virtuel, répertoire, .htaccess.
Le script_cgi est appliqué aux fichiers ayant le type MIME ou handler indiqué à chaque fois qu’ils sont demandés. Ce mécanisme peut être utilisé de plusieurs façons. Il permet, par exemple, de faire passer certains fichiers dans un filtre avant de les servir sur le Web. À titre d’exemple simple, supposons que nous voulions conserver tous nos fichiers .html sous un format compressé afin d’économiser l’espace disque et les décompacter à la volée lorsque nous les délivrons. Apache nous permet de le faire très simplement : le site site.first est une copie de site.filter, sauf que son fichier httpd.conf est le suivant :
User webuser
Group webgroup
ServerName localhost
DocumentRoot /usr/www/APACHE3/site.filter/htdocs
ScriptAlias /cgi-bin /usr/www/APACHE3/cgi-bin
AccessConfig /dev/null
ResourceConfig /dev/null
AddHandler peter-zipped-html zhtml Action peter-zipped-html /cgi-bin/unziphtml
<Directory /usr/www/APACHE3/site.filter/htdocs>
DirectoryIndex index.zhtml
</Directory>
Les points importants à noter sont :
- AddHandler met en place un nouvel handler avec un nom de notre invention, peter-zipped-html, et lui associe une extension de fichier, zhtml (notez l’absence de point).
- Action met en place un filtre :
Action peter-zipped-html /cgi-bin/unziphtml
signifie « applique le script CGI unziphtml à tous les fichiers associés au handler peter-zipped-html ».
Le script CGI .cgi-bin/unziphtml contient les lignes suivantes :
#!/bin/sh
echo "Content-Type: text/html"
echo
gzip -S .zhtml -d -c $PATH_TRANSLATED
Il applique le programme gzip avec les options suivantes :
-S
Utilise l’extension de fichier .zhtml (au lieu de l’extension .gz ).
-d
Décompacte le fichier
-c
Produit le résultat sur la sortie standard afin qu’il puisse être envoyé au client (au lieu de décompacter le fichier sur place).
gzip est appliqué au fichier dont le nom est contenu dans la variable d’environnement PATH_TRANSLATED.
Enfin, on doit remplacer nos fichiers .html en .zhtml. Dans .htdocs nous avons compressé et renommé :
- catalog_summer.html en catalog_summer.zhtml
- catalog_autumn.html en catalog_autumn.zhtml
Il aurait été plus simple de les laisser sous le nom que leur donne gzip (avec une extension .html.gz ), mais une extension de fichier correspondant à un type MIME ne peut contenir de point.
Nous voulons également convertir index.html, mais l’on doit se souvenir qu’il doit maintenant appeler les catalogues renommés avec les extensions .zhtml. Une fois ces modifications faites, on peut le compresser et le renommer en index.zhtml.
Nous savons que Apache servira automatiquement index.html s’il se trouve dans un répertoire, mais cela n’arrivera plus maintenant puisqu’il s’appelle index.zhtml. Pour que ce fichier soit produit comme index, nous avons besoin d’appliquer la directive DirectoryIndex (voir le chapitre 7) au répertoire concerné :
<Directory /usr/www/APACHE3/site.filter/htdocs>
DirectoryIndex index.zhtml
</Directory>
Lorsque tout cela aura été mis en place, faites ./go et la page apparaîtra exactement comme avant.