301 Редирект (301 Redirects)

301 Редирект (301 Redirects) Изучение

Термин 301 перенаправление описывает постоянную переадресацию одного веб-адреса на другой. Мы объясним техническую подоплеку и покажем, как настроить Redirect 301 с файлом htaccess на сервере.

Для чего нужны 301 редиректы?

Редирект 301 — самый известный тип редиректа. Число 301 относится к основному коду состояния HTTP. В то время как код состояния 404 указывает на то, что запрошенный ресурс не может быть найден, коды 300 обозначают перенаправления. Как правило, переадресация 301 используется для предотвращения ошибок 404.

Мы даем обзор наиболее важных кодов состояния HTTP, связанных с редиректами:

Код состояния HTTP Объяснение
200 ОК Сервер нашел ресурс по запрошенному адресу и возвращает то же самое.
301 Перемещено навсегда Ресурс по запрошенному адресу постоянно доступен по новому адресу, который возвращает сервер. Старый адрес больше недействителен.
302 найдено Ресурс по запрошенному адресу временно доступен по новому адресу, который возвращает сервер. Старый адрес может снова стать действительным в будущем.
303 См. Другое Аналогично 302, но при вызове временного адреса разрешены только запросы GET.
307 Временное перенаправление Аналогично 302; В отличие от 303, клиент может изменить метод HTTP (GET, POST, PUT и т. д.) при вызове временного адреса.
404 Не Найдено Сервер не может найти ресурс по запрошенному адресу.

301 редирект для переноса контента

Веб-контент, также известный как ресурсы, расположен по веб-адресам. Иногда контент переносится, т.е. ЧАС. содержание остается прежним, но меняется адрес. Это и.а. случай при переходе с HTTP на HTTPS, переносе сайта на новый домен или корректировке структуры ссылок для поисковой оптимизации. Во всех случаях вы хотите избежать того, чтобы пользователи, обращающиеся к существующим адресам, не оказывались пустыми.

Если сервер не может выделить ресурс по адресу, он возвращает ошибку HTTP 404 «Not Found». Это раздражает пользователей, потому что тогда доступ к нужному ресурсу невозможен. Если к адресу обращается поисковый робот, а не человек, ошибка 404 приводит к деиндексации связанного ресурса. Операторы веб-сайтов стараются максимально избегать обоих сценариев.

301 редирект для поисковой оптимизации

За исключением изменения адреса веб-контента, переадресация 301 необходима для поисковой оптимизации (SEO) и онлайн-маркетинга. 301 переадресация используется для создания «красивых URL-адресов» и «канонических URL-адресов», которые важны для SEO. Сокращатели URL-адресов, популярные для распространения целевых страниц в социальных сетях, также внутренне полагаются на редиректы типа 301.

Читайте также:  "Полное руководство по DateTimePicker и MonthCalendar в C и Windows Forms"

Так почему же редиректы 301 так важны для SEO? В отличие от связанных перенаправлений 302, 303 и 307, только перенаправление 301 передает «сок ссылок» исходного адреса на новый адрес. Если поисковая система проиндексировала контент и оценила его как положительный, адрес можно сбросить с помощью перенаправления 301 без потери рейтинга. Вот как 301 редиректы делают сложные стратегии SEO, такие как стратегия нескольких доменов, возможными в первую очередь.

Как работает 301 редирект?

301 редиректы используются при обмене данными между веб-серверами и клиентами. Сервер указывает клиенту, что запрошенный ресурс больше не доступен по запрошенному веб-адресу (URL), и передает действительный адрес. Клиентом может быть браузер пользователя-человека или бот поисковой системы.

  1. Клиент пытается получить доступ к ресурсу по URL-адресу.
  2. Сервер отвечает кодом состояния 301 «Перемещено навсегда» и передает новый URL-адрес для доступа к ресурсу в заголовке местоположения HTTP.
  3. Клиент кэширует новый URL-адрес; будущие обращения к старому URL-адресу сразу же переходят к новому URL-адресу.
  4. Клиент пытается получить ресурс по новому URL-адресу.

Этот процесс можно проиллюстрировать с помощью популярного сетевого инструмента cURL. Мы вызываем домашнюю страницу IONOS по адресу «http://ionos.de » и используем параметр —head для вывода заголовка ответа HTTP:

curl —head https://proprogrammer.ru/

Сервер IONOS отвечает кодом состояния HTTP «301 Moved Permanently», заголовок местоположения содержит новый адрес «https://www.ionos.de/». Как мы видим, домашняя страница находится на поддомене WWW и использует протокол HTTPS. Затем мы также указываем cURL следовать перенаправлению 301 с параметром —location :

curl —head —location https://proprogrammer.ru/

Теперь cURL выводит заголовки двух подключений. На второй вызов сервер отвечает кодом состояния «200 OK» ; ресурс найден, содержимое передается в теле ответа. Тот же процесс выполняется в фоновом режиме в вашем браузере, когда вы вводите туда адрес.

Определить перенаправление 301 через файл htaccess

Мы видели, какую роль перенаправления 301 играют в обмене между сервером и клиентом. Но как определить 301 редиректы на сервере? Существуют разные подходы к этому; один из наиболее распространенных — определение директив перенаправления в файле htaccess веб-сервера Apache. Для этого должны быть активны соответствующие модули Apache:

Директивы Модуль Apache Объяснение
перенаправить mod_alias Простые перенаправления
переписать mod_rewrite Сложные редиректы

Простые перенаправления для 301 перенаправления в файле htaccess

Во-первых, давайте посмотрим, как простые переадресации 301 можно определить в файле htaccess. Для этого мы используем директивы перенаправления модуля mod_alias. Они полезны, когда речь идет о перенаправлении URL-адреса на сервере на другой URL-адрес. Схема очень проста:

Redirect 301 «/source_path» «target_URL»

Во-первых, давайте перенаправим URL-адрес на сервере на другой внутренний URL-адрес. Косая черта в начале указывает на начало пути URL, т.е. часть после домена:

Redirect 301 «/old.html» «/new.html»

Если вместо этого мы хотим указать внешний URL-адрес, отметим, что в качестве цели:

Redirect 301 «/old.html» «http://example.com/new.html»

301 перенаправление для целых каталогов также может быть определено в файле htaccess с помощью директивы перенаправления. Мы перенаправляем все URL-адреса, начинающиеся с компонента пути «de», на поддомен:

Redirect 301 «/de/» «http://de.example.com/»

Все URL домена можно перенаправить на другой домен по той же схеме :

Redirect 301 «/» «http://other.example.com/»

Если вы хотите перенаправить много отдельных адресов, которые следуют определенному шаблону, запись отдельных перенаправлений быстро становится громоздкой. Затем вы получаете доступ к соответствующей директиве RedirectMatch. Это использует регулярное выражение для сопоставления шаблонов и извлечения их частей:

RedirectMatch 301 regex URL

Здесь мы показываем пример записи RedirectMatch, которая извлекает категорию и идентификатор статьи из параметров GET и перезаписывает их в пути:

RedirectMatch 301 «/article.php?cat=(.*)&id=(.*)» «/articles/$1/$2/»

Давайте представим, что это домен «example.com». Тогда URL-адрес «http://example.com/article.php?cat=web&id=42» будет перенаправлен на «http://example.com/articles//web/42/».

Сложные редиректы для 301 редиректа в файле htaccess

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

Читайте также:  Как сбросить пароль в ASP.NET Identity 2.0 - исчерпывающее руководство

С mod_rewrite можно связать правила переадресации; модуль предоставляет своего рода мини-язык программирования для преобразования URL-адресов и запуска перенаправлений. Здесь нужно соблюдать осторожность, потому что неправильное использование может привести к бесконечным циклам.

Директивы перезаписи начинаются со строки «RewriteEngine on». За этим следуют необязательные условия пересылки RewriteCond, завершающиеся одним или несколькими правилами пересылки RewriteRule. На поведение условий и правил переадресации могут влиять параметры, называемые «флагами». Чтобы сработало перенаправление 301, одно из правил должно содержать флаги L,R=301 :

RewriteEngine on

RewriteCond TestString CondPattern [flags]

RewriteRule URL_path Substitution [L,R=301]

В правилах и условиях пересылки есть доступ к многочисленным переменным заголовка и сервера в форме %{HTTP_HOST}, %{REQUEST_URI} и т. д. Их можно связать с помощью операторов и обработать с помощью функций. Это означает, что можно реализовать почти любое желаемое перенаправление, даже если синтаксис не совсем интуитивно понятен.

Давайте рассмотрим пример перенаправления 301 с использованием mod_rewrite. Мы хотим использовать канонические URL-адреса на нашем веб-сайте, чтобы избежать дублирования контента. Это означает, что все URL-адреса должны начинаться с HTTPS и WWW, независимо от того, как посетители получают доступ к контенту.

Мы определяем два условия пересылки, которые мы связываем друг с другом с помощью флага OR. Первое условие проверяет, отключен ли HTTPS, второе условие проверяет, отсутствует ли в домене ведущая WWW. Мы отключаем различие между верхним и нижним регистром с помощью флага NC. Если одно из двух условий верно, мы перенаправляем через 301 на HTTPS-WWW-версию URL-адреса. Мы используем регулярное выражение (.* ), которое выбирает любой URL-адрес и добавляет его в домен с помощью $1 :

RewriteEngine on

RewriteCond %{HTTPS} off [OR]

RewriteCond %{HTTP_HOST} ^example\.com [NC]

RewriteRule (.*) https://www.example.com/$1 [L,R=301]

Какие проблемы и опасности возникают при использовании 301 редиректа?

301 редиректы — это стандартные инструменты веб-разработки и SEO. Однако при настройке требуется осторожность; если редиректы используются неправильно, вырисовываются серьезные проблемы. Сервер может выйти из строя или сайт может потерять позиции в поисковых системах.

Читайте также:  Выбор и правильное применение фильтров действий

Повреждение файла htaccess при изменении вручную

Файл htaccess настраивает веб-сервер Apache на уровне каталога. Даже самые незначительные ошибочные изменения в файле htaccess легко приводят к тому, что веб-сайт становится недоступным. Тогда под WordPress грозит пресловутая ошибка сервера 500 или «Белый экран смерти».

Лучше всего сделать копию файла htaccess перед его редактированием. Это очень легко сделать из командной строки. Мы переходим в общедоступный веб-каталог сайта и используем команду cp :

cp -a.htaccess _htaccess

Если возникают ошибки после изменения файла htaccess, восстанавливаем исходную версию :

cp -a _htaccess.htaccess

Связанные перенаправления и циклы перенаправления

Перенаправления полезны, но «стоят» полного цикла «запрос-ответ». Если используются цепные перенаправления, пользователям приходится ждать, что приводит к увеличению показателя отказов. Поисковые системы также оценивают страницы, которые переходят несколько раз подряд. Как правило, подряд может быть подключено не более трех редиректов.

Циклы перенаправления, в которых два адреса бесконечно пересылаются друг другу, являются фатальными. Для пользователей это влияет на ошибку браузера ERR_TOO_MANY_REDIRECTS. Желаемый ресурс не может быть достигнут. Как правило, вы должны протестировать вновь настроенные перенаправления с помощью cURL, чтобы убедиться, что желаемый результат достигнут.

Случайное отравление кеша при использовании перенаправления 301

Неправильное использование перенаправления 301 может впоследствии вызвать головную боль. В отличие от временных переадресаций 302, 303 и 307, переадресация 301 указывает клиенту кэшировать новый URL. Если вы хотите позже переключиться на исходный URL-адрес, этот запрос не проходит через клиентов; вместо этого они постоянно продолжают подключаться к новому URL-адресу. Чтобы противодействовать этому, используйте временные перенаправления или установите для заголовка Cache-Control подходящее значение.

Мы устанавливаем заголовок Cache-Control на один час при определении правила Redirect 301 в файле htaccess. Это гарантирует, что последующие изменения адресата переадресации дойдут до всех клиентов:

ExpiresActive on

ExpiresDefault «access plus 1 hour»

Redirect 301 / https://www.example.com/

Если используются сложные перенаправления с директивами перезаписи, мы используем трюк, чтобы установить заголовок Cache-Control. Мы определяем переменную окружения limitcache как часть правила перенаправления 301. Затем мы устанавливаем заголовок, считывая переменную окружения как условие. Это гарантирует, что при пересылке будет установлен правильный заголовок:

RewriteRule ^.* http://www.example.com/ [L,R=301,E=limitcache:1]

Header always set Cache-Control «max-age=3600» env=limitcache

Оцените статью
Блог о программировании
Добавить комментарий