Nginx: 301 rewrite при смене структуры URL (миграция)
Постоянный редирект старой ветки URL на новую (например /old-category/ на /blog/). Директива rewrite с флагом permanent по документации ngx_http_rewrite_module.
Как использовать
- Разместить правило в server {} или в нужном location. Заменить old-category и /blog/ на свои пути.
- После изменений: nginx -t && systemctl reload nginx. Проверка: curl -I https://site.ru/old-category/page/ — ожидаем 301 и Location на новый URL.
При миграции сайта или смене CMS старая структура URL часто меняется (например, было /category/, стало /blog/). Чтобы не терять трафик и передавать ссылочный вес, старые адреса должны отдавать 301 Moved Permanently с заголовком Location на новый URL. Официальная документация: ngx_http_rewrite_module.
Одна ветка на другую
Редирект всего поддерева /old-category/ на /blog/ с сохранением пути после префикса:
rewrite ^/old-category/(.*)$ /blog/$1/ permanent;
^/old-category/(.*)$— совпадает с путём вида/old-category/любое/;(.*)захватывает «хвост»./blog/$1/— целевой URL;$1подставляется захваченной частью.permanent— код ответа 301; для временного редиректа используетсяredirect(302).
Несколько правил
При разных префиксах задайте отдельный rewrite для каждого:
rewrite ^/old-category/(.*)$ /blog/$1/ permanent;
rewrite ^/tag/(.*)$ /blog/tag/$1/ permanent;
Порядок важен: nginx обрабатывает правила последовательно. Правила rewrite лучше размещать в server {} или в общем location / {}.
Подробнее: Миграция с WordPress на Bitrix без потери SEO.