Автоматическая генерация HTML-редиректов

Постановка задачи

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

Формализуем задачу так: имеется таблица из двух столбцов. Первый столбец содержит старый URL страницы, второй столбец содержит новый URL страницы. Такую таблицу подготовить несложно.

Скрипт получает на вход таблицу редиректов, воссоздает структуру каталогов старого сайта, в каждом каталоге создает файл index.html с HTML мета-тегом перехода на страницу нового сайта.

Для такого метода редиректа не требуется дополнительных настроек сервера. Метод корректно работает, если каждая страница сайта представляет собой каталог. Если же страницы имеют вид contacts.php (заканчиваются на расширение), то такой метод не сработает. Необходимо использовать редирект на базе .htaccess.

Подготовка таблицы редиректов

Содержимое таблицы редиректов определяется автором сайта, мы же определим ее формат.

Таблица должна представлять собой CSV файл. Лишние пробелы можно не удалять, они будут проигнорированы.

Я готовил данные в Org Mode, поэтому у меня получился файл с таким содержимым (отрывок):

| http://blog.ansmirnov.ru/tags/sed/         | https://ansmirnov.ru/sed/         |
| http://blog.ansmirnov.ru/tags/SysAdm/      | https://ansmirnov.ru/sysadm/      |
| http://blog.ansmirnov.ru/tags/MySQL/       | https://ansmirnov.ru/mysql/       |
| http://blog.ansmirnov.ru/tags/Programming/ | https://ansmirnov.ru/programming/ |

Для работы скрипта необходимо определить следующие параметры:

Первый параметр – символ, который используется в качестве разделителя. В моем случае это символ |.

Второй и третий параметры – это номера столбцов таблицы, в которых содержатся новый и старый URL. Столбцы нумеруются с 1. В моем случае первый столбец пустой, 2-ой столбец содержит старый URL, 3-й столбец содержит новый URL. Параметры для запуска скрипта следующие: "|" 2 3.

Сам файл с данными будет подаваться на стандартное устройство ввода.

Создание структуры каталогов

Для создания файловой структуры, которая будет реализовывать HTTP-редиректы, можно воспользоваться скриптом, приведенным ниже.

#!/bin/bash

while read line
do
    old_url=`echo $line | cut -d"$1" -f$2`
    new_url=`echo $line | cut -d"$1" -f$3`
    html="<html><head><meta http-equiv="refresh" content="0;URL=${new_url}" /></head><body></body></html>"
    cdir=`echo ${old_url} | sed 's/http:\/\///g' | sed 's/https:\/\///g'`
    mkdir -p $cdir
    echo $html > $cdir/index.html
done

Код скрипта нужно скопировать в файл build_redirects.sh.

Таблицу редиректов необходимо сохранить в файл redirects.csv.

Запуск скрипта осуществляется командой

cat redirects.csv | bash build_redirects.sh "|" 2 3

Последние символы необходимо заменить на собственные параметры.

В результате работы скрипта будет создан каталог SITE_NAME. Его содержимое необходимо загрузить на сервер сайта, с которого осуществляется редирект.

Заключение

В статье приведен скрипт для воссоздания структуры каталогов для осуществления редиректов методом HTML мета-тегов.

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