Un code retour personalisé avec apache

Petite astuce pour un problème que j’ai rencontré il y a quelques temps avec apache. Je souhaitais modifier le code retour d’une requête (en l’occurrence remplacer un code 403 par 404).

J’ai été surpris de ne trouver aucun module pour le faire, sécurité, redirection ou autre contrôle sur les requêtes.

La solution trouvée fut d’utiliser un script cgi, qui se charge de faire la réponse à la place d’apache, et est appelé en page d’erreur. Cela donne:

ScriptAlias /cgi-bin/ /home/www/cgi/
ErrorDocument 403 /cgi-bin/404.cgi

Le script en question est fait en bash pour simplifier les choses:

#!/bin/sh
echo Status: 404 Not Found
echo Content-type: text/html
echo
cat << EOM
<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL ${REQUEST_URI} was not found on this server.</p>
<hr>
<address>Apache/2.2.22 (Debian) Server at chimrod.com Port 80</address>
</body></html>
EOM
exit 0

et voilà!