Pour planter le décor : un site a été modifié en quelques années et GWT indique à l'administrateur que des liens venant de l'extérieur aboutissent à des erreurs 404. Rien de grave ? Si, car il s'agit d'un site marchand et son référencement va s'en ressentir mais en plus il y en a plusieurs milliers !
Bien sûr, l'administrateur habitué va tout de suite penser à une solution basée sur ModRewrite d'Apache pour générer des redirections HTTP 301 (permanentes) et il aura raison :) Voici la chose :
RewriteEngine On
RewriteLogLevel 0
RewriteMap VieillesPages404 txt:../../../../home/www/LeSite/www/oldies.404.txt
RewriteMap lowercase int:tolower
RewriteCond ${lowercase:%{REQUEST_URI}|NONE} ^(.+)$
RewriteCond ${VieillesPages404:$1} >""
RewriteRule ^(.*)$ ${VieillesPages404:$1|$1} [R=301,L]
J'ai ajouté ce code dans l'hôte virtuel parce qu'un .htaccess n'autorise pas la directive RewriteMap.
Au final, j'ai plusieurs milliers de redirections gérées sans aucune pénalité pour le serveur, un référencement de nouveau satisfaisant et une liste d'adresse qui peut évoluer au fil du temps puisqu'il ne s'agit que d'un fichier texte !
Attention : le fichier texte, oldies.404.txt, est composée de lignes contenant deux champs avec le premier précédé d'un '/' alors que le second n'en possède pas.
Source : http://www.jeremytunnell.com/posts/mod_rewrite-attempting-to-bend-rewritemap-rewritecond-and-rewriterule-to-my-will
Reste à faire : tester httxt2dbm pour qu'Apache utilise une base de données optimisée à base de hash pour repérer plus rapidement les URL à rediriger. N'en ayant pas eu besoin je ne l'ai pas fait.