Unredir

Script pour remplacer les URLs redirigées, dans les pages Web.
Fonctionne en ligne de commande sur un site statique, de préférence sur une image locale à mettre en ligne.

Prérequis

Requiert PHP 7.
Curl doit être activé dans le fichier de configuration php.ini.

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

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é.