К содержимому

masterskaya@krym:~/redirect/perenos-stranic$ tail -n +1 6bb0713.log

Каталог переезжает на новую версию CMS, 1800 товаров с адресами по ID

oleg1986 начал 24 ноября 2025

решенок решению

ответов
3 ответа
последний
11 месяцев назад
участвуют
001
Делаю переезд каталога стройматериалов для клиента из Феодосии: со старой версии CMS, которую уже не обновить, на актуальную. Товаров около 1800, адреса были вида /catalog/item.php?id=4521, на новой версии будут /catalog/kraska-fasadnaya-belaya/. Таблицу соответствия выгружу из базы скриптом, это не проблема, старый ID в новой базе сохраню в отдельном поле.
Вопрос в том, как аккуратно сделать 1800 перенаправлений, да ещё с параметром в адресе. Писать RewriteCond на каждую строку не хочется, да и сервер у клиента на nginx. Переезжать хотим в декабре, пока у них затишье и стройка стоит.
start
002
Со стороны поиска: посмотрите, нет ли в индексе старых адресов с хвостами вроде &sort= или &page=. На них хватит одного правила на раздел, каждую комбинацию тащить не надо.
003
Для nginx удобнее всего map. Выгружаете таблицу в отдельный файл «старый id - новый адрес», подключаете его, и одно правило на всё:
Код:
map $arg_id $new_item { include /etc/nginx/items_map.conf; } location = /catalog/item.php { if ($new_item) { return 301 $new_item; } return 301 /catalog/; }
В items_map.conf строки вида «4521 /catalog/kraska-fasadnaya-belaya/;». 1800 строк nginx прочитает при старте и не заметит. Товары, которых больше нет, уходят на каталог, а не в 404. Проследите только, чтобы файл лежал там, где его не перетрёт обновление панели хостинга.
решение++4
004
Прошло три недели после переезда. Сделал через map, как Леонид показал, файл сгенерировал из базы, вышло 1786 строк. В логах за первую неделю по этому правилу отдались 301 почти на все старые адреса, 404 по каталогу единицы, это товары, которые клиент удалил ещё летом. По заказам просадки нет, но декабрь у них и так тихий, настоящая проверка будет весной.
автор темы

# Отвечать могут участники мастерской. Если вы уже участник, войдите под своим ником.

login

# Ответы участников — их личный опыт. Перед правками на рабочем сайте сделайте копию.