Steve Frécinaux

Déménagement et « 301 Moved Permanently »

Le site s’est déplacé depuis l’hébergement prêté grâcieusement par o0o vers mon hébergement sur l’APINC (en attendant que soit terminée la nouvelle version du site). Pensez donc à mettre à jours vos bookmarks/liens/agrégateurs.

Il est probable qu’agrégateur ou navigateur (et les divers moteurs de recherche) fassent la mise à jour par eux-même (c’est le cas de Straw, me dit mat). En effet dans la norme HTTP se trouve un mécanisme intéressant, il s’agit des codes de réponses. Par exemple lorsqu’une page est trouvée, le serveur renvoie un code 200, ou un code 404 lorsqu’aucune page correspondante n’est trouvée. Mais l’un de ces codes correspond bien à ce cas de figure : le code 301, qui signifie que la page ciblée a été déplacée de façon permanente (par opposition à un déplacement temporaire qui correspond à un autre code).

Pour déplacer un site proprement, il convient donc de placer sur chacune des anciennes URLs une redirection agrémentée du code d’erreur ad-hoc. Voici l’idée : le site utilisait des règles d’URL-rewriting pour attribuer chaque url à un script particulier. Il suffisait donc de remplacer les scripts cibles de ces réécritures par ce script, disons redirect.php :

<?php
header('Moved Permanently',true,301);
header('Location: http://tw.apinc.org' . $_SERVER['REQUEST_URI']);
?>

Et dans le .htaccess :

RewriteEngine On
RewriteRule ^weblog redirect.php [L]
(...)
DirectoryIndex redirect.php

C’est très simple et efficace, ça redirige tout ce qui passe, mais une URL erronnée sera aussi redirigée vers le nouvel emplacement. Qu’importe, c’est alors qu’un code d’erreur plus approprié (404 par exemple) sera retourné.

Si vous utilisez l’astuce dite du MultiView (c’est à dire qu’un fichier PHP fait office de répertoire, technique utilisée entre autres par DotClear et ChuWiki), il suffit alors, plutôt que d’utiliser la réécriture d’URLs, de remplacer chacun de ces fichiers par une copie de redirect.php.