Введение
HTTP-перенаправление – это способ указать один домен или адрес на другой. Существует несколько различных видов перенаправлений, каждое из которых имеет свое значение для веб-браузера клиента. Два наиболее распространенных типа – это временные и постоянные перенаправления.
Временные перенаправления (код состояния ответа 302 Найдено) полезны, если URL временно должен обслуживаться из другого местоположения. Например, если вы выполняете техническое обслуживание сайта, вы можете использовать временное перенаправление с вашего домена на страницу объяснения, чтобы информировать посетителей о том, что вы скоро вернетесь.
Постоянные перенаправления (код состояния ответа 301 Перемещено навсегда), с другой стороны, информируют браузер о том, что он должен полностью забыть старый адрес и больше не пытаться получить к нему доступ. Они полезны, когда ваш контент был перманентно перемещен в новое местоположение, например, когда вы меняете доменное имя.
В этом руководстве будет рассмотрено более подробное объяснение того, как реализовать каждый вид перенаправления в Nginx, а также приведены примеры для конкретных случаев использования.
Предварительные требования
Чтобы следовать этому руководству, вам понадобится:
- A server with Nginx installed and set up to serve your website(s). You can find some examples and instructions on the tutorials for Ubuntu 22.04, Debian, or CentOS.
Решение в двух словах
В Nginx большинство перенаправлений можно осуществить с помощью встроенной директивы rewrite
. Эта директива доступна по умолчанию при свежей установке Nginx и может использоваться для создания как временных, так и постоянных перенаправлений. В самой простой форме она принимает как минимум два аргумента: старый URL и новый URL.
Вы можете реализовать временное перенаправление с помощью следующих строк в конфигурации вашего сервера:
Это перенаправление указывает браузеру направлять все запросы для www.domain1.com
на www.domain2.com
. Однако это решение работает только для одной страницы, а не для всего сайта. Чтобы перенаправить более одной страницы, вы можете использовать директиву rewrite
с регулярными выражениями, чтобы указать целые каталоги вместо одиночных файлов.
redirect
совпадает с шаблонами регулярных выражений в скобках. Затем он ссылается на совпадающий текст в пункте назначения перенаправления, используя выражение $1
, где 1
– это первая группа совпадающего текста. В более сложных примерах последующие совпадающие группы нумеруются последовательно.
Например, если вы хотите временно перенаправить каждую страницу в www.domain1.com
на www.domain2.com
, вы можете использовать следующее:
По умолчанию директива rewrite
устанавливает временное перенаправление. Если вы хотите создать постоянное перенаправление, вы можете сделать это, заменив redirect
на permanent
в конце директивы, как показано ниже:
Давайте перейдем к некоторым конкретным примерам.
Пример 1 — Переход на другой домен
Если у вас уже есть веб-присутствие и вы хотите изменить свой домен на новый адрес, лучше всего не просто покидать старый домен. Закладки на ваш сайт и ссылки на ваш сайт, размещенные на других страницах в Интернете, перестанут работать, если ваш контент исчезнет без каких-либо инструкций браузеру о том, как найти его новое местоположение. Изменение доменов без перенаправления приведет к потере трафика на вашем сайте от предыдущих посетителей и старых ссылок.
В этом примере мы настроим перенаправление с старого домена, называемого domain1.com
, на новый домен, называемый domain2.com
. Здесь мы будем использовать постоянные перенаправления, потому что старый домен будет отключен, и весь трафик должен идти на новый домен.
Допустим, у вас настроен веб-сайт для обслуживания с одного домена, называемого domain1.com
, уже настроенный в Nginx следующим образом:
Мы также предположим, что вы уже обслуживаете вашу будущую версию веб-сайта на domain2.com
:
Давайте изменить файл конфигурации блока сервера domain1.com
, чтобы добавить постоянное перенаправление на domain2.com
:
Мы добавили вышеупомянутое перенаправление, используя директиву rewrite
. Регулярное выражение ^/(.*)$
соответствует всему после /
в URL. Например, http://domain1.com/index.html
будет перенаправлен на http://domain2.com/index.html
. Чтобы добиться постоянного перенаправления, мы просто добавляем permanent
после директивы rewrite
.
Примечание: Не забудьте протестировать вашу конфигурацию, используя nginx -t
, а затем перезапустить Nginx после внесения изменений.
Пример 2 — Создание постоянного опыта несмотря на изменения имени одностраничника
Иногда необходимо изменить названия отдельных страниц, которые уже были опубликованы и получили трафик на вашем сайте. Изменение только названия приведет к ошибке 404 Not Found для посетителей, пытающихся получить доступ к исходному URL, но вы можете избежать этого, используя перенаправление. Это гарантирует, что люди, которые добавили в закладки ваши старые страницы или нашли их через устаревшие ссылки в поисковых системах, все равно достигнут правильной страницы.
Допустим, на вашем сайте были две отдельные страницы для продуктов и услуг под названиями products.html
и services.html
соответственно. Теперь вы решили заменить эти две страницы на одну общую страницу предложений под названием offers.html
. Мы настроим простое перенаправление для products.html
и services.html
на offers.html
.
Мы предполагаем, что ваш сайт настроен следующим образом:
Настройка перенаправлений сводится к использованию двух директив перенаправления.
Директива rewrite
принимает исходный адрес, который должен быть перенаправлен, а также адрес назначения новой страницы. Поскольку изменение здесь является постоянным, мы также использовали permanent
в директиве. Вы можете использовать столько перенаправлений, сколько пожелаете, чтобы убедиться, что ваши посетители не увидят ненужных ошибок 404 Not Found при перемещении содержимого сайта.
Вывод
Теперь у вас есть знания для перенаправления запросов на новые местоположения. Обязательно используйте правильный тип перенаправления, поскольку неправильное использование временных перенаправлений может негативно сказаться на вашем рейтинге в поисковой выдаче.
Существует множество других применений HTTP-перенаправлений, включая принудительное использование безопасных SSL-соединений (т.е. использование https
вместо http
) и убедиться, что все посетители окажутся только на адресе сайта с префиксом www.
.
Использование перенаправлений правильно позволит вам использовать ваше текущее веб-присутствие, давая вам возможность модифицировать структуру вашего сайта при необходимости. Если вы хотите узнать больше о способах, с помощью которых вы можете направлять своих посетителей, у Nginx отличная документация по этой теме в разделах модуль перезаписи официальной документации и официальном блоге о создании перенаправлений.