Логотип сайта alsol.ru

Записки по компьютерной тематике

Редирект 301 — как правильно настроить переадресацию

Если вы являетесь опытным пользователем, то можете сразу перейти к разделу с описанием как настроить редирект 301.

Что такое редирект 301?

Далеко не все начинающие веб-мастера знают что такое «редирект 301″ и для чего он предназначен. Как видно из названия, данное понятие состоит из двух частей:

301 — это код статуса, возвращаемого веб-сервером клиенту (браузеру);
редирект — от англ. redirect, переводится как переадресация или перенаправление.

Общение между браузером и веб-серовром

Если вы не знаете как происходит обмен информацией между клиентом и веб-сервером, то стоит остановиться на этом вопросе поподробнее. Когда вы набираете в адресной строке вашего браузера какой-нибудь адрес и нажимаете Enter, ваш браузер отправляет запрос веб-серверу, в котором указывается имя и путь к файлу который вы ходите получить. Рассмотрим несколько примеров.

Адресная строка. Редирект 301.

В данном случае можно сказать, что браузер обращается к серверу alsol.ru и просит возвратить документ index.php, который находится в директории /slovar-synonymov/.

Адресная строка. Редирект 301.

А здесь браузер обращается к серверу yandex.ru, у которого есть поддомен www. Как видно на картинке, пользователь не ввёл имя файла, который необходимо получить. Но благодаря настройкам сервера, в таком случае клиенту будет отправлен документ index.html. В этом можно убедиться если ввести в адресную строку https://www.yandex.ru/index.html. В результате вы увидите всё ту же заглавную страницу Яндекса.

Можно сделать вывод, что после обращения браузера к веб-серверу, последний возвращает ему запрашиваемый документ который и отображается на экране пользователя. Но так бывает не всегда.

Что такое код статуса запроса

Наверняка вы не раз видели в браузере сообщения об ошибках вместо запрашиваемой страницы. Если не можете вспомнить, посмотрите как они выглядят.

 Ошибка 404. Редирект 301.Ошибка 404. Редирект 301.

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

Если говорить правильно, то код статуса возвращается в любом случае, так как он является неотъемлемой частью протокола HTTP. Если страница существует и будет передана браузеру, возвращается код статуса 200 OK. Ниже приведены наиболее популярные коды:

200 — OK. Страница отдана клиенту;
301 — Moved Permanently. Страница перемещена по новому постоянному адресу;
304 — Not Modified. Страница не изменялась и может быть загружена из кеша браузера;
403 — Forbidden. Доступ к запрашиваемому контенту запрещён;
404 — Not Found. Документ не найден;
500 — Internal Server Error. Внутренняя ошибка веб-сервера.

Полный список статусов и их расшифровку можно найти здесь.

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

В каких случаях применяется редирект 301

Очень часто случается так, что веб-мастер меняет структуру своего сайта, после чего все статьи становятся доступны по новому адресу. Но как быть поисковым системам, которые успели проиндексировать сайт и запомнили старые адреса страниц? Своим пользователям они будут выдавать недостоверные результаты, которые скорее всего будут вести не на ожидаемую страницу, а на страницу с ошибкой 404 (Документ не найден). Для исправления данной ситуации и используется специальный код статуса 301, который позволяет перенаправить браузер по новому адресу.

Но это не единственный случай применения 301 редиректа. Если заглянуть в недалёкое прошлое, то в пору развития интернета почти все адреса сайтов начинались с www, что расшифровывается как WorldWideWeb. В настоящее время данный префикс считается анахронизмом и большинство веб-мастеров стараются что бы их сайт был доступен по адресу без префикса www. Но настройки большинства хостинг компаний таковы, что чаще всего сайт оказывается доступен как по адресу с www, так и без него. С первого взгляда может показаться, что всё не так уж плохо, но это далеко не так.

Дубли страниц

Очевидно, что все поисковые системы стараются выдавать своим пользователям самые релевантные (максимально отвечающие запросам) результаты. А одним из основных врагов поисковых систем являются сайты, содержащие одинаковый контент. Для чего нужен интернет содержащий кучу одинаковых страниц? Представляете, если поисковик представит вам результат где, каждый сайт будет содержать одну и ту же одинаковую информацию. Очень скоро такая поисковая система перестанет пользоваться популярностью и будет влачить жалкое существование на задворках интернета.

А теперь попробуйте догадаться, что же происходит когда сайт становится доступен по адресу начинающегося с префикса www и без него. Правильно, мы получаем дубли страниц с одинаковым содержимым, но находящиеся по двум разным адресам. Такой сайт очень рискует попасть в чёрный список поисковых систем и остаться без посетителей.

Для борьбы с дублями как нельзя кстати помогает использование редиректа 301. Когда веб-сервер в ответ на запрос типа www.mysite.com, вместо искомой страницы и статуса 200 OK возвращает статус 301 Moved Permanently и новый адрес mysite.com (уже без www), это и называется использование 301 редиректа.

Аналогичным примером дублей можно назвать ситуацию, когда одна и та же страница становится доступной по адресу mysite.com/ и mysite.com/index.html. Естественно адреса взяты лишь для примера. В каждом конкретном случае адреса могут быть самыми разными (index.php, index.htm и т.д.).

Переезд сайта на новый домен

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

Как настроить редирект 301

Наконец-то можно перейти к самому главному вопросу данной статьи. Как правильно организовать редирект 301? Существует несколько способов это сделать.

Редирект 301 с помощью файла .htaccess

Использование файла .htaccess подойдёт в первую очередь тем веб-мастерам, которые не хотят вмешиваться в код своей CMS или не чувствуют уверенности в своих навыках программирования.

Простая переадресация директивой Redirect

Для перенаправления всех запросов со старого сайта на новый, создайте в корне старого сайта файл .htaccess и добавьте в него строку:

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

Redirect 301 /article.html http://mysite.com/articles/article-1.html

Общий синтаксис использования директивы Redirect файла .htaccess выглядит следующим образом:

Redirect [Код] URI_FROM URL_TO
где:
Код — это код статуса запроса который будет возвращён клиенту (необязательный параметр);
URI_FROM — путь относительно корня сайта, запросы к которому буду переадресовываться;
URL_TO — новый адрес (имеется ввиду полный адрес вида http://site.com), куда будет переадресован клиент.

Использование директивы RedirectMatch

Более гибкими возможностями обладает директива RedirectMatch, которая позволяет использовать регулярные выражения для параметра URI переадресовываемой страницы. К примеру для того, что бы организовать редирект

http://myblog.ru/09-02-2016/301-redirect/ =>
http://myblog.ru/index.php?year=2016&month=02&day=09&title=301-redirect

можно использоваться следующий код:

Одним из недостатков данных директив является невозможность использования параметров GET передаваемых в URI. Т.е. сделать обратный редирект

http://myblog.ru/index.php?p=1 => http://myblog.ru/p-1.php

не получится.

Для того, что бы иметь возможность работать с параметрами GET необходимо использовать возможности модуля mod_rewrite.

Редирект с помощью директив модуля mod_rewrite

Модуль mod_rewrite является довольно сложным в освоении, но взамен предоставляет поистине неисчерпаемые возможности модификации URL и настройки переадресации. В основе модуля лежит использование регулярных выражений  применяемых к URI запрашиваемого клиентом документа. Директива RewriteRule в случае совпадения регулярного выражения с URI, выполняет замену данной строки с возможностью использования в качестве подстановки совпавших групп регулярного выражения.

Рассмотрим несколько примеров, начиная с более сложного.

Для организации редиректа

http://myblog.ru/index.php?y=2016&m=02&d=09 =>
http://myblog.ru/2016-02-09/

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

Примечание: если не добавлять знак вопроса в конце строки замены директивы RewriteRule, то в результате в адресной строке браузера будет адрес вида http://myblog.ru/2016-02-09/?y=2016&m=02&d=09

Директива RewriteCond позволяет обращаться к переменным сервера применяя к ним регулярные выражения. Следующая за ней директива RewriteRule выполнится только в том случае, если совпадёт регулярное выражение в предыдущей строке директивы RewriteCond.

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

http://alsol.ru/любое_слово => http://alsol.ru/slovar-synonymov/любое_слово

выполняется следующим образом:

Напоследок осталось рассмотреть возможность организации редиректа с помощью функции отправки заголовков языка PHP.

Редирект с помощью PHP

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

Первая строка возвращает клиенту код 301 редиректа, вторая передаёт новый URL-адрес, на который будет перенаправлен клиент, а третья завершает работу PHP.

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

Автор: cekTop7
Опубликовано: 09.02.2016
...

2 комментария на «“Редирект 301 — как правильно настроить переадресацию”»

  1. Здравствуйте! Хороший, подробный и понятный пост про редирект. Очень долго не понимал суть этого понятия и всегда забывал, т.к. не часто приходилось сталкиваться с ним. Сейчас, решил освежить в памяти и зашел к вам.

  2. Отличный пост. Разложили всё «по полочкам»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *