Отменить

Сценарий для замены перенаправленных URL-адресов на веб-страницах.
Работает в командной строке на статическом сайте, желательно на локальном изображении для размещения в сети.

Необходимое предварительное условие

Требуется PHP 7.
Curl должен быть включен в файле конфигурации php.ini.

Этот сценарий просматривает страницы веб-сайта, проверяет каждый URL-адрес и при перенаправлении заменяет URL-адрес новым.

Это подходит и для сайтов, которые переходят с HTTP на HTTPS, это обновляет ссылки, как на самом сайте, так и на всех остальных связанных сайтах.

Он также отображает нарушенные ссылки и для статических узлов заменяет инструмент тестирования ссылок, такой как Link Checker на этом сайте.

Код

Программа использует класс DOMDocument PHP для поиска ссылок в тегах <a> или изображениях. Но он также использует функцию file_get_contents (), чтобы загрузить файл как необработанный текст.

Программа использует Curl, чтобы проверить, перенаправляется ли связь, а затем найти окончательный адрес перенаправления.

Функция str_replace используется для замены перенаправленных URL-адресов (а не setAttribute). Затем содержимое сохраняется с помощью file_put_contents ().
Использование этих альтернативных функций позволяет избежать использования метода saveHTMLile, который пытается восстановить HTML-содержимое перед сохранением файла. Потому что после этого добавляются теги, которые уже могут находиться в файле php.

Код PHP теста перенаправления:

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;
}

Руководство по эксплуатации

Откройте консоль командной строки, перейдите в каталог, содержащий обновляемые страницы сайта. Введите:

php c:/unredir/unredir.php [options]

Замените в команде указанный выше каталог на тот, где вы установили unresh.

Возможны два варианта:

-t тест, проверить результат без изменения файлов.

-v, просмотр всех отсканированных страниц.

Загрузка

Версии:

См. также...

Преобразование HTTP в HTTPS. Этот сценарий заменяет http-ссылки на https для определенного домена. Он дополняет его, поскольку также меняет ссылки в тексте. Но он учитывает перенаправления только для указанного домена.