301 редирект с исключением папки /catalog: универсальное правило htaccess

    При переносе структуры сайта часто требуется убрать из URL промежуточный сегмент, например, /catalog. Задача: настроить 301 редирект, который преобразует /catalog/раздел/подраздел/товар в /раздел/подраздел/товар, сохраняя всю вложенность. Простое правило с [^/]+ работает только для одного уровня, поэтому нужен более гибкий подход.

    Почему простое правило не подходит?

    Правило RewriteRule ^catalog/([^/.]+)/?$ https://site.ru/$1 [R=301,L] захватывает только первый сегмент после /catalog/ и игнорирует всё, что идёт дальше. Это приводит к потере подразделов и названий товаров, что плохо для SEO и пользовательского опыта.

    Универсальное решение для всех уровней вложенности

    Чтобы редирект работал для любого количества сегментов, используйте шаблон (.*) - он захватывает всю оставшуюся часть URL после папки /catalog. Вот готовое правило для файла .htaccess:

    RewriteEngine On
    RewriteRule ^catalog/(.*)$ https://site.ru/$1 [R=301,L]

    Это правило перехватывает любой запрос, начинающийся с /catalog/, и перенаправляет на тот же путь без /catalog. Например:

    • /catalog/раздел/раздел
    • /catalog/раздел/подраздел/раздел/подраздел
    • /catalog/раздел/подраздел/товар/раздел/подраздел/товар

    Важные нюансы и рекомендации

    Проверка на дублирующийся слеш

    Если в конце URL может быть слеш, правило всё равно сработает корректно, так как (.*) захватывает и его. Однако для единообразия лучше задать канонический адрес (со слешем или без) и дополнительно настроить редирект для удаления/добавления слеша.

    Исключение конкретных страниц

    Если нужно исключить из редиректа определённые страницы внутри /catalog, добавьте условие RewriteCond перед правилом. Например, исключим страницу /catalog/special:

    RewriteCond %{REQUEST_URI} !^/catalog/special [NC]
    RewriteRule ^catalog/(.*)$ https://site.ru/$1 [R=301,L]

    Тестирование перед публикацией

    Перед применением правила на production-сервере обязательно протестируйте его в локальной среде или с помощью инструментов вроде Redirect Path (Chrome-расширение) или HTTP Status Code Checker. Убедитесь, что все внутренние ссылки и карта сайта обновлены.

    Что делать, если редирект не срабатывает?

    Проверьте, включён ли модуль mod_rewrite в Apache. Убедитесь, что файл .htaccess расположен в корневой директории сайта и имеет права на чтение. Иногда редирект блокируется кэшированием браузера - очистите кэш или используйте режим инкогнито.

    Настройка 301 редиректа с удалением папки - простая задача, если использовать правильный синтаксис. Универсальное правило с (.*) решает проблему для любых уровней вложенности и помогает сохранить SEO-вес страниц.

    Часто задаваемые вопросы