Генератор .htaccess
301-редиректы, ЧПУ, канонизация домена для Apache/OLS.
Настройка редиректов через .htaccess
Сайт, доступный сразу по четырём адресам (http://example.ru, https://example.ru, http://www.example.ru, https://www.example.ru), для поисковика выглядит как четыре разных ресурса с одинаковым содержимым. Вес внешних ссылок дробится, в индекс попадает случайный вариант, а в отчётах Метрики трафик размазан по нескольким строкам. Склейка 301-редиректом на один канонический адрес закрывает вопрос за вечер.
Что задать в генераторе
- Домен: имя без протокола и без завершающего слеша. Вариант с www или без выбирайте по тому, какой уже проиндексирован; главное зеркало видно в Яндекс.Вебмастере.
- Редирект http → https: включайте, когда сертификат установлен и страница открывается без предупреждений браузера. Иначе получите недоступный сайт.
- Слеш в конце: одна форма на весь сайт. Адреса
/catalogи/catalog/поисковик считает разными страницами, смешивать их нельзя. - Свои 301-редиректы: старый путь, пробел, новый адрес. Строка выглядит так:
/old-page/ /new-page/.
Готовый блок вставьте в начало файла .htaccess в корне сайта, выше правил CMS. Порядок принципиален: Apache читает директивы сверху вниз и останавливается на первом сработавшем правиле с флагом [L].
Как проверить, что всё встало
Откройте старый адрес и посмотрите на цепочку. Правильная выглядит так: один запрос, один ответ 301, конечный адрес отдаёт 200. Через консоль это делается одной командой:
curl -sSI -A "Mozilla/5.0" http://example.ru/old-page/
Смотрите строки HTTP/ и Location. Двойной прыжок с http на https, а оттуда на www технически работает, только каждый лишний переход добавляет задержку и слегка размывает передаваемый вес. Правило протокола и правило домена лучше объединить в одно, а не ставить два подряд.
Где .htaccess не работает
Nginx этот файл не читает вообще, там правила пишут в конфиг сервера директивами return 301 и rewrite. OpenLiteSpeed синтаксис Rewrite понимает, но подхватывает изменения не сразу: после каждой правки нужен lswsctrl restart. Без рестарта вы будете тестировать старую версию правил и гадать, почему ничего не поменялось. Директиву Header set OpenLiteSpeed игнорирует полностью, заголовки там задают в настройках виртуального хоста.
Ошибки, которые кладут сайт
- Петля редиректа, браузер отдаёт
ERR_TOO_MANY_REDIRECTS. Классическая причина: Cloudflare в режиме Flexible плюс правилоRewriteCond %{HTTPS} off. До сервера доходит обычный http-запрос, сервер снова гонит посетителя на https, круг замыкается. - Забытая строка
RewriteEngine Onв начале блока. Правила молча не работают, ошибок в логе нет. - Точка в домене без экранирования. Внутри
RewriteCondточка означает любой символ, поэтому пишутexample\.ru. - 302 вместо 301 при переезде. Временный редирект не передаёт вес и не склеивает адреса, старая страница держится в индексе месяцами.
- Файл сохранён в кодировке cp1251 или с BOM. Сервер отвечает 500 на любой запрос.
Что сделать после установки
Скопируйте старый .htaccess до заливки нового. Восстановление из копии занимает 10 секунд, а разбор упавшего сайта без неё растягивается на час. Дальше дайте знать поисковикам: в Яндексе склейка зеркал занимает от 2 до 6 недель, Google обычно обновляет данные быстрее. Старую карту сайта с прежними адресами замените новой, иначе робот будет ходить по редиректам и жечь краулинговый бюджет вместо обхода живых страниц.
Генератор работает в браузере: домен и список редиректов никуда не отправляются.
Частые вопросы
Куда вставлять .htaccess?
Файл .htaccess кладут в корень сайта. Он работает на серверах Apache и OpenLiteSpeed. Для Nginx правила надо переносить в конфиг сервера — синтаксис там другой.
Почему важен один вариант домена?
Если сайт открывается и на www, и без www, и по http, и по https — для поисковика это дубли одной страницы. Склейка 301-редиректом на один канонический адрес убирает дубли и не распыляет вес ссылок.
Обязательно проверять после установки?
Да. Проверьте цепочку редиректов — исходный адрес должен вести на конечный одним 301, без петель и лишних переходов.
Что делать, если появилась петля редиректа?
Уберите правило перехода на https и проверьте, не выполняет ли этот переход прокси или CDN. В режиме Flexible у Cloudflare сервер получает обычный http-запрос и снова отправляет посетителя на https, круг замыкается. Лечится переключением на режим Full либо переносом редиректа на сторону CDN.
Работают ли эти правила на Nginx?
Нет, Nginx файл .htaccess не читает. Правила переносят в конфиг сервера директивами return 301 и rewrite. На Apache и OpenLiteSpeed код работает без изменений, но OpenLiteSpeed требует рестарта после каждой правки файла.