Настройка временного и постоянного перенаправления Apache и Nginx

Что такое HTTP-перенаправление?

HTTP-перенаправление (или URL редирект) – это техника переадресации одного домена или адреса на другой. Существует множество вариантов применения перенаправления.

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

Зачем серверу перенаправление?

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

Перемещение на другой домен

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

В противном случае все закладки и ссылки на ваш сайт, расположенные на других страницах сети Интернет, перестанут работать, поскольку контент исчез без каких-либо указаний, как браузеру искать его новое местонахождение.

Изменение домена без перенаправления не только приведёт к потере трафика от предыдущих посетителей, но и может серьёзно повлиять на доверие к сайту.

Расширение на похожие домены

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

К примеру, если у вас есть домен supersite.com, вы могли бы также приобрести домены вроде supersite.net и supersite.org, а затем просто перенаправить оба похожих домена на основной.

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

Изменение имени страницы

Иногда возникает необходимость изменять имена ранее опубликованных страниц сайта, на которые уже идёт трафик. Как правило, это приводит к 404 Not Found (или другой ошибке, в зависимости от настроек безопасности сервера). Но этого можно избежать, перенаправив пользователей на другую страницу, которая содержит искомый контент.

Форсирование SSL-соединений

Простой и достаточно распространённый способ перенаправления – это направление всего трафика на использование SSL вместо стандартного HTTP.
Таким образом можно перенаправить все запросы с http://www.mysite.com на адрес https://www.mysite.com и тем самым повысить безопасность соединений.

Методы перенаправления

Существует несколько различных методов перенаправления URL-адресов, каждый из которых означает какое-то изменение для браузера клиента.

Самыми распространёнными являются временные перенаправления 302 и постоянные перенаправления 301.

Временный редирект

Временный редирект (англ. Temporary redirect) необходим в том случае, если контент определённого URL-адреса должен временно обслуживаться в другой точке.

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

Временный редирект сообщает браузеру, что контент временно находится в другой точке сети, но со временем вернётся к исходному URL-адресу.

Постоянный редирект

Постоянный редирект (англ. Permanent redirect) полезен в случае, если контент был перемещён в другое место навсегда.

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

Этот редирект сообщает браузеру, что он более не должен обращаться к старому URL-адресу, но должен обновить свои данные и всегда обращаться к новому адресу.

Перенаправление Apache

Для перенаправления трафика Apache использует несколько инструментов. Самый простой из них – это модуль mod_alias. Существует также более сложный модуль mod_rewrite, позволяющий настраивать более обширные редиректы.

Директива Redirect

Apache позволяет выполнять простые редиректы для одной страницы при помощи директивы Redirect, которая входит в модуль mod_alias. Эта директива требует как минимум два аргумента – это старый и новый URL-адреса.

Простейшая форма применения этой директивы в конфигурациях сервера выглядит так:

<VirtualHost *:80>
ServerName www.domain1.com
Redirect / http://www.domain2.com
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.com
. . .
. . .
</VirtualHost>

Этот редирект направляет все запросы к www.domain1.com на домен www.domain2.com. Директива Redirect может использоваться только для перенаправления одной страницы, а не всего сайта.

По умолчанию Redirect устанавливает временный редирект (или 302).

Использовать Redirect для постоянного редиректа можно двумя способами:

Redirect 301 /oldlocation http://www.domain2.com/newlocation
Redirect permanent /oldlocation http://www.domain2.com/newlocation

Директива RedirectMatch

Чтобы создать перенаправление для нескольких страниц (или для всего сайта), используйте директиву RedirectMatch, которая позволяет задать каталог с шаблонами при помощи регулярных выражений. Таким образом можно перенаправлять не только отдельные файлы но и целые каталоги.

RedirectMatch ищет соответствия шаблонам в скобках, а затем ссылается на найденный текст при помощи”$1″, где 1 – это первая группа любых символов, заданных ранее при помощи (.*). Следующие группы символов  нумеруются последовательно.

К примеру, чтобы перенаправлять каждый запрос к каталогу /images на поддомен images.example.com, можно использовать:

RedirectMatch ^/images/(.*)$ http://images.example.com/$1

Как и при использовании директивы Redirect, можно указать тип редиректа, указав соответствующий код перед правилами URL-а.

Использование mod_rewrite

Наиболее гибким и наиболее сложным инструментом для перенаправления является модуль mod_rewrite.

К сожалению, описание этого инструмента настолько обширно, что его невозможно охватить в данной статье. Подробную информацию о модуле mod_rewrite можно найти в этом руководстве.

Перенаправление Nginx

Перенаправление на сервере Nginx гораздо проще. В большинстве случаев для перенаправления контента можно создать блок server.

Например, чтобы перенаправить запросы с domain1.com на domain2.com, можно создать следующий блок:

server {
listen 80;
server_name domain1.com;
return 301 $scheme://domain2.com$request_uri;
}

Директива return выполняет подстановку URL-адреса, а затем возвращает заданный код статуса и указанный URL.

В данном случае директива обращается к переменной “$scheme” для использования любой схемы, заданной в исходном запросе (HTTP или HTTPS). Затем она возвращает код постоянного редиректа 301 и новый URL-адрес.

Для обработки перенаправления каталога на отдельный поддомен можно использовать директиву rewrite, аналогичную перенаправлению каталогов на сервере Apache:

rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;

Данная директива, расположенная в блоке server, создаст временный редирект запросов к каталогу images на поддомен images.example.com.

Для постоянного редиректа замените redirect в конце строки на permanent.

Итоги

Убедитесь, что выбрали правильный тип перенаправления, так как неправильное использование временных редиректов может отрицательно повлиять на рейтинти поисковиков.

Разумное использование перенаправления позволит вам изменять структуру сайта по мере необходимости и тем самым сделать свой сайт гораздо продуктивнее. Более подробную информацию о перенаправлении Apache и Nginx можно найти в официальной документации этих серверов.

Tags: , , ,

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