Генератор 301 редиректа

Выберите, что перенаправлять, и введите свой домен. Вы получите правила для .htaccess Apache и для блока server Nginx, готовые для вставки, и команды для их проверки.

Что перенаправлять
Веб-сервер
.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Поместите правила в начало файла .htaccess в корневой папке сайта. Для этого Apache нужны mod_rewrite и AllowOverride для этой папки; на большинстве виртуального хостинга есть и то, и другое.

Проверка

shell
# .htaccess is read on every request: no reload needed
curl -I http://example.com/

В ответе должен быть выбранный вами код статуса и заголовок Location с новым адресом.

Для конфигурации Nginx нужен сервер с root-доступом. На небольшом VPS работают Nginx, ваш сайт и его сертификаты. Сейчас от 3,02 € в месяц, на выбор: 2 226 серверов.

Работает в вашем браузере: ничего из введённого не отправляется на сервер.

Как это считается

Редирект — это ответ сервера с кодом статуса 3xx и заголовком Location. Браузер или поисковая система затем запрашивает новый адрес. Генератор записывает редирект как можно раньше: в Nginx — блоком server, который больше ничего не делает, в Apache — правилами перезаписи в начале .htaccess.

# Apache, .htaccess
RewriteRule ^old-page\.html$ /new-page [R=301,L]

# Nginx
location = /old-page.html {
    return 301 /new-page;
}

Apache сопоставляет путь с регулярным выражением, поэтому точки и другие специальные символы в пути экранируются, а ведущий слеш опускается, потому что .htaccess его убирает. Nginx сравнивает точный location как обычный текст. Оба сохраняют строку запроса посетителя, если только у старого адреса не было своей. Правила для HTTPS и www ведут сразу на конечный адрес, а не через два редиректа подряд.

Пример

Вы переносите example.com на www.example.com: запросы к http://example.com/blog, http://www.example.com/blog и https://example.com/blog получают один редирект 301 на https://www.example.com/blog. Нормально отдаётся только https://www.example.com.

Какой код статуса выбрать

КодЗначениеДля чего
301Перемещён навсегдаСтраница или сайт, переехавшие насовсем. Поисковые системы передают позиции старого адреса новому.Страница или сайт, переехавшие насовсем. Поисковые системы передают позиции старого адреса новому.
302Найден, временно в другом местеКороткий обход, например страница распродажи или техобслуживание. Старый адрес остаётся в результатах поиска.Короткий обход, например страница распродажи или техобслуживание. Старый адрес остаётся в результатах поиска.
307Временный, тот же методКак 302, но форма, отправленная через POST, снова отправляется через POST.Как 302, но форма, отправленная через POST, снова отправляется через POST.
308Постоянный, тот же методКак 301, но сохраняет POST. Полезно для API или обработчика формы, который переехал.Как 301, но сохраняет POST. Полезно для API или обработчика формы, который переехал.

Вопросы

Чем отличается редирект 301 от 302?

301 говорит, что адрес переехал навсегда: браузеры запоминают его, а поисковые системы заменяют старый адрес новым. 302 говорит, что перенос временный, поэтому старый адрес сохраняет своё место. Используйте 301 для нового домена, HTTPS или переименованной страницы; Google в любом случае воспринимает 302, которая держится долго, как 301.

Перенаправлять www на без www или наоборот?

Для поисковых систем подходит любой вариант, если вы выберете один и перенаправите на него другой. Короткую форму проще набирать; www упрощает установку cookie только для сайта и указание имени на CDN через запись CNAME.

Почему мой редирект зацикливается?

Обычно потому, что HTTPS завершается на прокси или CDN, а сервер видит каждый запрос как http:// и перенаправляет даже запросы https://. Отметьте параметр прокси, чтобы проверять заголовок X-Forwarded-Proto. В Cloudflare режим SSL Full (strict) решает проблему. После исправления очистите кэш браузера: браузеры запоминают редиректы 301.

Читает ли Nginx файлы .htaccess?

Нет. В Nginx нет файлов настроек для отдельных папок, поэтому правила из файла .htaccess нужно записывать в конфигурацию сервера, как на вкладке Nginx здесь, и перезагружать Nginx. Для этого нужен доступ к серверу: VPS его даёт, а виртуальный хостинг обычно нет.