Unredir
Ce script parcourt les pages de votre site web, teste chaque URL, et lorsqu'elle est redirigée, remplace l'URL par la nouvelle adresse.
Cela convient aussi pour les sites qui passent de HTTP au HTTPS, cela met à jour les liens, aussi bien sur le site lui-même que sur tous les autres sites liés.
Il affiche aussi les liens brisés et pour les sites statiques remplace donc un outil de test de liens comme Link Checker sur ce site.
Le code
Le programme utilise la classe DOMDocument de PHP pour trouver les liens dans les balises <a> ou les images. Mais il utilise aussi la fonction file_get_contents() pour charger le fichier comme un texte brut.
Une routine fait appel à Curl pour tester si un lien est redirigé, puis pour trouver l'adresse de redirection finale.
La fonction str_replace est utilisée pour remplacer les URLs redirigées (et non setAttribute). Puis on sauvegarde le contenu avec file_put_contents().
Le recours à ces fonctions alternatives évite de passer par la méthode saveHTMLFile qui essaie de reconstituer un contenu HTML avant de sauver le fichier. Car alors des balises sont ajoutées alors qu'elles peuvent déjà figurer dans un fichier php inclut.
Code PHP de test de redirection:
function redirected($url)
{
$hcurl=curl_init();
curl_setopt($hcurl, CURLOPT_CONNECTTIMEOUT, 300);
curl_setopt($hcurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($hcurl, CURLOPT_VERBOSE, false);
curl_setopt($hcurl, CURLOPT_URL, $url);
curl_setopt($hcurl, CURLOPT_HEADER, true);
curl_setopt($hcurl, CURLOPT_NOBODY, true);
curl_setopt($hcurl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($hcurl, CURLOPT_SSL_VERIFYPEER, false);
$headers = curl_exec($hcurl);
$code = curl_getinfo($hcurl, CURLINFO_HTTP_CODE);
if($code!=301)
{
curl_close($hcurl);
return "";
}
curl_setopt($hcurl, CURLOPT_FOLLOWLOCATION, true);
$headers = curl_exec($hcurl);
$newurl = curl_getinfo($hcurl, CURLINFO_EFFECTIVE_URL);
$code = curl_getinfo($hcurl, CURLINFO_HTTP_CODE);
curl_close($hcurl);
if($code!=200)
{
return "";
}
return $newurl;
}
Mode d'emploi
Ouvrez la console de ligne de commande, Aller dans le répertoire contenant les pages du site à mettre à jour. Tapez:
php c:/unredir/unredir.php [options]
Remplacez dans la commande le répertoire ci-dessus par celui où vous avez installé unredir.
Deux options sont possibles:
-t test, tester le résultat sans changer les fichiers.
-v verbose, afficher toutes les pages scannées.
Téléchargement
Versions:
- 24 mars 2021: Ajouté le décompte des liens brisés.
Voir aussi...
Conversion de HTTP en HTTPS. Ce script remplace les liens de http en https pour un domaine donné. Il est complémentaire à celui-ci dans la mesure ou il change aussi les liens dans le texte. Mais il ne prend en compte les redirections que pour un domaine spécifié.