← Назад
Что такое 301 редирект веб сайтов простыми словами и как его сделать

Настройка 301 редиректа в файле .htaccess, что такое 301 Permanent Redirect и код состояния HTTP 301, и другое.

Прочитав статью, вы узнаете: чем 301 отличается от 302, как не потерять вес сайта при переезде, какие шесть строчек кода решают 90% задач и почему редирект может не работать даже при идеальном синтаксисе. В конце — чек-лист для самопроверки и мнение нашего маркетолога.

Настройка 301 редиректа в файле .htaccess

5
(5)

Команда NewPoint продолжает просвещать своих дорогих клиентов и подписчиков, и сегодня мы хотели бы поднять важную и сложную тему редиректа. Мы могли бы дать Вам готовый код, но толка от этого было бы мало. Лучше мы разложим все по полочкам, раскроем все нюансы, чтобы Вы потом смогли ориентироваться в техническом смысле предложенного кода и выбирать подходящий вариант, исходя из условий. 

Итак, если Вам надоело оставаться в неведении, приготовьтесь узнавать много нового. 

Что такое 301 Permanent Redirect и код состояния HTTP 301?

Редирект — это перенаправление с одной страницы на другую. Переходя по ссылке на страницу с редиректом, пользователь может даже не узнать, что его отправили на другую площадку. Делается это для того, чтобы актуализировать ссылку: подменить ресурс более актуальным. Например, заменить http-страницу на ее https-версию. 

Редирект может работать на стороне сервера или в браузере. Серверный вариант (через .htaccess или конфиги Nginx) — самый быстрый и правильный. Браузерный редирект через мета-теги почти не используется в SEO, потому что медленный и хуже передает вес. Так что забудьте про JavaScript и meta refresh, то работаем через сервер.

Permanent Redirect 301 или код состояния 301 — одна из популярных разновидностей редиректа. Она позволяет настроить сервер так, чтобы в ответ на запрос браузера он выдавал сообщение о том, что сайт «переехал», причём на постоянной основе. Браузер понимает, что страница больше не доступна по текущему адресу и совершает переход по новому. При этом старый URL становится недействительным, а его вес перемещается на новый адрес. 

Разница между 301 и 302 редиректом

Класс редиректов 3хх достаточно широкий, но наиболее известны из них 301 и 302. Их очень легко спутать, однако для поисковых роботов эти коды имеют принципиальную разницу. 

301 Moved Permanently — постоянный редирект. Эта комбинация сигнализирует роботу о том, что старый ресурс окончательно перемещен на новую площадку, а значит старый домен можно удалить из базы. Используется данный редирект для «переезда» на новый домен, для подключения новой CMS и для склейки идентичных страниц.

302 Temporary Redirect — временный редирект. Он говорит о временном перемещении сайта или отдельных его страниц. Как правило, используется, когда на основной площадке проводятся технические работы. 

Раньше считалось, что при 301 редиректе страница теряет до 15% веса. Актуальные данные от Google говорят другое: при правильной настройке 301, 302 и даже 307 редиректов вес передается полностью. Но есть условие — новый URL должен быть реально похож на старый по смыслу. Не пытайтесь перекинуть страницу с кошками на раздел с банковскими картами, толку не будет.

Последствия для поисковой выдачи также неоднозначные:

  • При 301 редиректе в поисковой выдаче отображается новый URL, старый игнорируется.
    Однако на эту смену требуется время, Google рекомендует сохранять статус страницы в течение года, чтобы не «сбить» выдачу.
  • При 302 редиректе поисковая система хранит старый URL в течение полугода, в это время выдавая новую ссылку. По прошествии полугода редирект получает статус постоянного. 

Поисковые системы с подозрением относятся к 302 коду, так как нередко вебмастера упускают сроки, а затем пытаются вернуть настройки. Да и злоупотребление данным редиректом при черном SEO добавило негативного отношения. Поэтому, если Вам дорога репутация ресурса и его положение в выдаче, лучше не рисковать и пользоваться 301 редиректом в .htaccess.

Правила настройки Redirect, RewriteRule и RewriteCond

Существует несколько директив, с помощью которых совершается перенаправление пользователя. 

Директива Redirect в htaccess

Синтаксис:  

Redirect [status] /oldpage http://newpage

Стандартное перенаправление, которое используется чаще всего. В скобках вместо status необходимо указать код редиректа: 301 или 302. Страница «oldpage» должна быть прописана
в формате без указания полного адреса сайта, но с указанием полного относительного адреса URL начиная со слэша «/», то есть нужно указать именно корень сайта. 

Адрес «newpage» прописывается полностью, то есть с названием домена и протокола http
или https. 

Пример:

Redirect 301 /oldpage.php https://htaccess.ru/newpage.php

Пример:

Redirect 301 /oldpage.php https://htaccess.ru/newpage.php

Директива RewriteRule

Синтаксис:

RewriteRule Шаблон Подстановка [коды]

Директива RewriteRule диктует правила перехода на новую платформу. Если проводится внешний редирект, URL меняется в строке браузера — «[R=301,L]». При внутреннем редиректе URL не меняется — «[R=301]» или «[L]».

Директива RewriteCond

Синтаксис:

RewriteCond Сравниваемая_Строка Условие

Директива RewriteCond задает условия, при которых будут выполняться правила RewriteRule. Такими условиями могут стать браузер, IP-адрес, заголовок и т.д. 

Для чего используется перенаправление?

Редирект активно используется вебмастерами, так как полезен в различных обстоятельствах:

  • При переезде сайта на новый домен. Чтобы не потерять трафик, направляющийся на старую страницу, создается перенаправление.
  • Установка SSL-сертификата. Позволяет перенаправить пользователь со страниц с http на адрес с префиксом.
  • Смена URL страницы. Это событие может быть связано со сменой CMS или с SEO-оптимизацией.
  • Перенос разделов на субдомены. 
  • Для концентрации трафика с разных доменных зон в одной. Вебмастер покупает домены example.com, example.ru, example.net, example.org и example.biz и на четырех последних сайтах настраивает редирект на example.com.
  • Для показа мобильным пользователям специальной версии. 
Необходима помощь с seo-оптимизацией Вашего сайта?

Оставьте свои контакты и получите консультацию от нашего специалиста БЕСПЛАТНО.

Телефон*:

    Обязательное поле!

    Способы настроить редирект 301

    В зависимости от площадок, с которой перенаправляется, и на которую направляется поток трафика, используется различный синтаксис редиректа. 

    С одной страницы на другую

    Данный редирект раз и навсегда изменит URL страницы и позволит избавиться от дублей
    и устаревших материалов. 

    Синтаксис:

    Redirect 301 /oldpage/ http://site.ru/newpage/

    Более подробный синтаксис того же редиректа:

    RewriteCond %{REQUEST_URI} ^/oldpage/$ 
    RewriteRule ^.*$ 
    http://site.ru/newpage/? [R=30

    После сохранения такого кода будет осуществляться постоянная переадресация со старой страницы на новую, раздел старой страницы будет удален из поиска, а новой странице передастся весь ее вес.

    Склейка зеркал сайта (www / без www)

    Подобная работа проводится в том случае, когда под один сайт приобретается сразу несколько доменов, различающихся лишь наличием или отсутствием тройного W.

    301 редирект с ресурса с www на платформу без www, при котором главным зеркалом считается домен без www, осуществляется при помощи следующей комбинации:

    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ http://%1/$1 [L,R=301] 

    Обратный редирект, при котором главным зеркалом считается домен с www, можно реализовать через код:

    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)$ http://www.%1/$1 [L,R=30

    Таким образом обе страницы связываются, и трафик не разделяется.  

    С http на https

    Чтобы в поиск не попадали дубли, а пользователи не заходили на страницы с разными протоколами, прописывается данный редирект. Его итогом будет добавление ко всем URL протокола https. Провести подобную работу можно на разных уровнях.

    Для всего сайта

    Чтобы полностью перенаправить сайт, необходимо в файле .htaccess добавить следующие строки:

    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

    При ряде обстоятельств такая комбинация может не сработать. В таком случае просто замените ее следующим кодом:

    RewriteCond %{HTTPS} =on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

    Если же и после этого изменения остается циклическое перенаправление, введите:

    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Редирект — дело сложное, поэтому и третий код не панацея. Если он не сработал, введите: 

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteCond %{REQUEST_URI} =/page.php
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

    Это должно помочь и все пользователи и поисковые системы будут перенаправляться на домен
    с протоколом https, но SEO-данные при этом останутся неизменными. 

    Постранично

    Если Вам необходимо перенести весь сайт, кроме одной страницы, используйте постраничный редирект. Он прописывается следующим образом:

    RewriteEngine On
    RewriteCond %{HTTPS} =off
    RewriteCond %{REQUEST_URI} !^/page.php
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

    После этого все страницы, кроме указанной, будут перенаправлены. 

    Для одной страницы

    Если же, наоборот, необходимо перенаправить единственную страницу, добавьте 4 строчки кода: 

    RewriteEngine On
    RewriteCond %{HTTPS} =off
    RewriteCond %{REQUEST_URI} =/page.php
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

    С https на http

    Чтобы провернуть обратный редирект и лишить всех страниц SSL-сертификата, используйте следующую комбинацию синтаксиса:

    RewriteCond %{HTTPS} =on
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

    Это должно связать страницы доменов и дать им протокол http.

    С 404 Not Found

    Чтобы перенаправлять пользователей с несуществующих страниц на главную или любую другую страницу, также можно использовать редирект. Однако, поисковые системы не любят обилие связок и считают необходимым указывать ошибку 404, поэтому работать нужно с осторожностью. 

    Синтаксис:

    ErrorDocument 404 http://www.site.com/301.html 

    В итоге все обращения к 404 страницам будут завершаться на главной странице сайта. 

    Итогом данного редиректа будет являться перенаправление всех обращений к страницам 404 на главную страницу сайта.

    Со страниц со слешем на без слеша

    Чтобы привести URL к единому формату и исключить все дубли в поиске, желательно провести редирект для сайтов без слэша. 

    Синтаксис:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^(.+)/$
    RewriteRule ^(.+)/$ /$1 [R=301,L]

    В итоге слэш просто удалится. 

    Со страниц без слеша на слеш

    Можно провернуть и обратную операцию. Для этого пропишите:

    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*[^/])$ $1/ [L,R=301]

    Результат — добавленный слэш на страницах без него.

    Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы

    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} ![^\/]$
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]

    Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы

    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} ![^\/]$
    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

    Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы

    RewriteCond %{REQUEST_URI} ^\/$
    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} \/$
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} \/$
    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]

    Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы

    RewriteCond %{REQUEST_URI} ^\/$
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} \/$ 
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} \/$
    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]

    Только адреса site.ru/index.php на основное зеркало site.ru

    Чтобы перенести сайт без GET-параметров, пропишите в файле:

    RewriteCond %{REQUEST_URI} /index.php
    RewriteCond %{QUERY_STRING} ^\z
    RewriteRule ^(.*)$ http://site.ru/? [R=301,L]

    Всех адресов с index.php и GET параметрами на страницы только с GET параметрами 

    Проводится при помощи команды:

    RewriteCond %{REQUEST_URI} /index.php
    RewriteRule ^(.*)$ http://site.ru/ [R=301,L]

    Итог: index.php в url будет вырезан.

    Для index.php, index.html или index.htm

    Провести массовую склейку на любой CMS, например, Joomla, можно при помощи кода:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ 
    RewriteRule ^(.*)index\.(php|html|htm)$ http://site.ru/$1 [R=301,L]

    Url с GET параметрами на статический

    Есть 2 варианта переноса сайта с динамическим-URL на статический:

    1 вариант — простой адрес с GET параметром:

    RewriteCond %{QUERY_STRING} ^id=229
    RewriteRule ^.*$ /supermodel/? [R=301,L] 

    2 вариант — со страницы и GET параметром:

    RewriteCond %{REQUEST_URI} /test/
    RewriteCond %{QUERY_STRING} ^id=229
    RewriteRule ^.*$ /supermodel/? [R=301,L]

    Каждая страница одного домена на такой же адрес другого url

    Подобная операция совершается при помощи кода:

    RewriteCond %{REQUEST_URI} (.*)
    RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
    Ваш сайт все еще не оптимизирован и выдает ошибки?

    Оставьте свои контакты и получите консультацию от нашего специалиста БЕСПЛАТНО.

    Телефон*:

      Обязательное поле!

      Редирект для PHP

      PHP— это сервероориентированный язык, поэтому такой вид редиректа будет проводиться
      на уровне сервера, а не браузера, что обеспечивает высокую скорость работы. При этом каждой страничке, на которую будет производиться редирект, присваивается свой уникальный REFERER, а это значит, что скрыть страницу-источник не получится.

      Чтобы редирект сработал, его чтение должно проводиться в первую очередь — до того, как
      на экран будет выведен первый символ. Поэтому ставить пробел перед <? нельзя.

      Код редиректа на примере файла index.php:

      <?php
      header («Location: https://stokrat.org/», TRUE, 302);
      ?>

      или

      <?php
      header («Location: https://stokrat.org/», TRUE, 301);
      ?>

      Если Вы подключаете 302 редирект, выбираете первый вариант; если 301 — второй.
      Дело в том, что через PHP, как правило, настраивают именно временное перенаправление.

      Редирект 301 в разных панелях управления хостингом

      Мы разберем две наиболее популярные панели — Cpanel и ISPmanager.

      Чтобы настроить редирект в Cpanel, перейдите в блок  «Домены» => «Перенаправления». Появится окно настройки, где нужно выбрать:

      • тип — постоянный 301;
      • https://www — выбрать старый домен сайта;
      • перенаправляет на — адрес нового домена;
      • поставить галочку напротив «Перенаправлять только с www».

      Сохраните настройки и перенаправление готово. 

      Через ISPmanager можно править файлы nginx.config или .htaccess, но вся работа уже сделана
      за Вас. К примеру, для настройки редиректа https/http достаточно просто убрать галочку с соответствующего пункта в разделе «WWW-домены».

      Файл .htaccess работает только на серверах Apache. Сейчас многие сидят на Nginx, но там нет .htaccess. Настройка делается через конфиги или панель хостинга. Если у вас Tilda, Wix или Readymag, искать .htaccess вообще бесполезно, ведь редиректы прописываются в разделе SEO в админке. Не лезьте в код, если не уверены.

      Особенности редиректа для популярных CMS

      CMS-системы облегчают процесс настройки редиректа вплоть до пары кликов.
      Опишем особенности взаимодействия с различными платформами. 

      WordPress

      Чтобы перенаправить страницу, Вам нужно скачать плагины из панели управления. Зайдите
      в «Плагины» -> «Добавить новый». Из доступных выберите необходимый и скачайте. 

      как сделать 301 редирект в вордпресс wordpress

      Yoast SEO — самый популярный плагин для оптимизации сайтов. Он обладает множеством функций, одной из которых является «перенаправление».

      Для использования этой функции, в разделе «Перенаправление» выберите код «301 Перемещено окончательно». Затем введите старый URL-адрес и новый URL-адрес, на который должна вести страница. После добавления перенаправления оно сохраняется в списках, которые в будущем можно редактировать.

      Yoast справляется, но когда у вас сотни удаленных товаров и старых страниц, управлять редиректами через него неудобно. Возьмите бесплатный плагин Redirection — он логирует все 404 ошибки и предлагает сам создать редирект на лету. Или Rank Math SEO Pro, если готовы доплатить за удобную таблицу.

      OpenCart

      Чтобы совершить редирект через OpenCart достаточно зайти в «Менеджер 301 редиректов»
      и выбрать необходимый вариант перенаправления.

      Битрикс

      В Битриксе Вам нужно обратиться к модулю «Редирект мастер», но за него придется доплатить.
      В оплаченном меню стоит выбрать свой вид редиректа и активировать его.  

      Joomla

      Найти компонент, отвечающий за редирект в Joomla, можно в меню «Компоненты» — > «Перенаправление». Здесь Вы увидите все имеющиеся редиректы и сможете создать новый, заполнить все поля и сохранить настройки. После этого редирект активируется. 

      Настройка кириллических доменов .РФ

      Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код на латинице. В частности, сама зона .рф преобразуется в .xn--p1ai.

      Далее представлены синтаксисы для доменов в зоне РФ.

      301 редирект с одного домена на другой

      RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
      RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

      Редирект на папки со слешем на конце

      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_URI} !\..{1,10}$
      RewriteCond %{REQUEST_URI} !(.*)/$
      RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]

      Редирект на папку без слеша — убираем слеш на конце

      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_URI} ^(.+)/$
      RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]

      Переадресация с домена в папку другого сайта

      RewriteCond %{HTTP_HOST} ^si-te\.ru$ [NC]
      RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]

      Редирект со всех страниц кроме определенной папки

      Кроме папки администратора bitrix #

      RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
      RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]

      Переадресация всех файлов папки на конкретный файл

      RewriteRule ^dir(.*)$ /new-file.php [L,R=301]

      Переадресация файлов папки на другой файл с исключением

      RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301]
      RewriteRule ^dir(.*)$ /all.php [L,R=301]

      Редирект замены расширений файлов — с html на php

      RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php

      Редирект с index.php на корень сайта

      RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
      RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L] 

      Редирект всех индексных страниц на корень

      RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]

      Переадресация с поддомена на основной домен

      RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC]
      RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA]

      Редирект страницы из различных директорий

      RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]

      Создаем ЧПУ-копию динамических страниц

      RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]

      Код позволяет создать копию страницы с относительным адресом
      /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/

      Переадресация с https на http

      RewriteCond %{HTTPS} "on"
      RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

      Настройка ответа 403 для спама по REFERER

      RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]
      RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
      RewriteRule .* - [F]

      Обработка ошибки 404 в .htaccess

      <?php
      header("HTTP/1.1 301 Moved Permanently");
      header("Location: http://www.site.ru/dir/");
      exit();
      ?>

      Как узнать, что переадресация работает правильно

      Узнать, корректен ли код 301 редиректа можно при помощи браузера. Введите в адресную строку URL страницы, с которой совершается переадресация. В идеале Вы должны увидеть ту страницу и тот URL, на которую был настроен редирект.

      После того, как Вы настроили 301 редирект, его необходимо проверить на корректность работы. Для этого введите в адресной строке своего браузера URL страницы, с которой была сделана переадресация. Если Вы видите новую страницу, то есть, ту, на которую сделали редирект
      — то все корректно работает.

      Также можно заглянуть в Яндекс.Вебмастер, открыть раздел «Инструменты» затем «Проверка ответа сервера». В поле «Опрашиваемый URL» введите адрес старой страницы. Вы должны получить код статуса http — «301 Moved Permanently».

      Проверка для тех, кто не боится командной строки

      Браузер и Вебмастер — хорошо. Но лучший способ увидеть всю цепочку редиректов — cURL. Если есть доступ к SSH или вы на Mac/Linux, введите:

      curl -I https://ваш-сайт.ру/старый-адрес

      В ответ увидите коды. Если после 301 идет 200 это отлично. Если три редиректа подряд, то сайт тормозит, а поисковики зря тратят краулинговый бюджет.

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

      Если проверка прошла неудачно и редирект не реализован проверьте ряд параметров:

      Синтаксические ошибки

      Любой лишний пробел, перенос строки или точка способны помешать работе команды. Копируйте код аккуратно, не добавляя комментариев, номеров строк и т.д.

      Использование URL адреса с параметром

      «Упрощенный» вариант редиректа в файле .htaccess вида: Redirect 301 «oldpage» «newpage»
      — который может уместиться в одну строку, работает исключительно с URL без параметров. 

      Команда типа Redirect 301 /index.php?productID=1109 http://dh-agency.ru/for-seo/ работать не будет. Замените ее на Redirect 301 /index.php http://dh-agency.ru/category/for-seo-professionals/.

      Некорректное расположение

      PHP-код, отдающий заголовок, должен находиться над всеми последующими командами
      и выводами. 

      Отключен модуль mod_rewrite

      Модуль mod_rewrite должен быть подключен и активирован — без него редирект не заработает.

      Конфликт с движком

      Вы все сделали правильно, а редирект не работает? Возможно, CMS перехватывает управление. В WordPress проверьте настройки адресов сайта в разделе «Общие». В Bitrix открывайте файл urlrewrite.php — он имеет приоритет над .htaccess. Иногда проще настроить редирект через админку сайта, чем мучить серверный файл.

      Чек-лист чтобы ничего не забыть перед настройкой редиректа

      Перед тем как сохранить .htaccess и выдохнуть, пробегитесь по пунктам:

      • Сделана резервная копия текущего .htaccess
      • Нет лишних пробелов и пустых строк в начале файла
      • Все URL прописаны без кириллицы (кроме зоны .рф, там своя история)
      • Для доменов .рф использован punycode (xn--…)
      • Убедились, что модуль mod_rewrite на хостинге включён
      • Нет конфликта с настройками самой CMS
      • Цепочка редиректов не длиннее 2 шагов
      • Проверили через cURL или любой онлайн-инструмент (например, httpstatus.io)

      Заключение

      301 редирект — инструмент полезный, но не для всех болезней. Не надо лепить его куда попало. Если переезжаете на час, то берите 302. Если склеиваете дубли, то 301 в помощь. Если пытаетесь сбежать от фильтра это не поможет, проблемы переедут с вами.

      Статья получилась объёмной, но главное вынесите для себя: аккуратная работа с .htaccess, один-два редиректа в цепочке, проверка после каждого сохранения. И да, бэкап. Еще раз — бэкап.

      кавычка

      Многие наши клиенты воспринимают 301 редирект как волшебную кнопку «почини мне позиции». Это не так. Если старую страницу любили люди и на неё вели ссылки, а новую вы сделали на коленке, то никакой редирект не спасет. Поисковики умные, они смотрят на поведение пользователя после перехода.
      И еще момент. Постоянные переклейки доменов, склейки зеркал, смена протоколов это стресс для сайта. Каждый такой манёвр лучше согласовывать с маркетингом, а не делать в пятницу вечером. Потому что в понедельник может оказаться, что весь трафик из соцсетей, где зашиты старые ссылки, ушёл в никуда из-за одной опечатки в .htaccess. Техника дело важное, но без стратегии это просто набор символов в файле.

      кавычка

        Есть вопросы?

        Получи консультацию БЕСПЛАТНО!

        Оставайтесь на связи

        Задай мне вопрос

        Телефон *

        Ваш вопрос *

        Общая оценка 5 / 5. Всего проголосовало 5

        0 0 голоса
        Рейтинг статьи
        Подписаться
        Уведомить о
        guest
        0 комментариев
        старые
        последние наиболее оцениваемые
        Межтекстовые Отзывы
        Посмотреть все комментарии
        0
        Оставьте комментарий! Напишите, что думаете по поводу статьи.x