Как создать временные и постоянные перенаправления с Nginx

Вступление

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

Временные перенаправления (код состояния ответа * 302 Найдено *) полезны, если URL-адрес должен временно обслуживаться из другого места. Например, если вы выполняете обслуживание сайта, вы можете использовать временное перенаправление с вашего домена на страницу объяснения, чтобы сообщить своим посетителям, что вы скоро вернетесь.

Постоянные перенаправления (код состояния ответа * 301 Перемещено постоянно *), с другой стороны, сообщают браузеру, что он должен полностью забыть старый адрес и больше не пытаться получить к нему доступ. Они полезны, когда ваш контент был постоянно перемещен в новое место, например, когда вы меняете доменные имена.

Вы можете создать временное перенаправление в Nginx, добавив такую ​​строку к записи блока сервера в файле конфигурации сервера:

rewrite  ;

Точно так же используйте такую ​​строку для постоянного перенаправления:

rewrite  ;

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

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Один сервер с установленным Nginx и настроенный для обслуживания вашего веб-сайта (ов) с блоками серверов. Вы можете сделать это, следуя инструкциям по настройке блоков серверов Nginx (виртуальных хостов) на https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on. -ubuntu-16-04 [Ubuntu 16.04], Debian или https: / /www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-centos-6[CentOS].

Решение с первого взгляда

В Nginx вы можете выполнять большинство перенаправлений с помощью встроенной директивы + rewrite +. Эта директива доступна по умолчанию при новой установке Nginx и может использоваться для создания как временных, так и постоянных перенаправлений. В простейшей форме он принимает как минимум два аргумента: старый URL и новый URL.

Вы можете реализовать временное перенаправление со следующими строками в конфигурации вашего сервера:

Временный редирект с перезаписью

server {
   . . .
   server_name www.domain1.com;
   rewrite ^/$ http://www.domain2.com redirect;
   . . .
}

Это перенаправление инструктирует браузер направлять все запросы для + www.domain1.com + на + www.domain2.com +. Это решение, однако, работает только для одной страницы, а не для всего сайта. Чтобы перенаправить более одной страницы, вы можете использовать директиву + rewrite + с regular выражений, чтобы вместо этого указывать целые каталоги только отдельные файлы.

+ redirect + соответствует шаблонам регулярных выражений в скобках. Затем он ссылается на сопоставленный текст в месте назначения перенаправления, используя выражение + $ 1 +, где + 1 + - первая группа сопоставленного текста. В более сложных примерах последующим соответствующим группам присваиваются номера последовательно.

Например, если вы хотите временно перенаправить каждую страницу с помощью + www.domain 1.com + на + www.domain 2.com +, вы можете использовать следующее:

Временный редирект с перезаписью

server {
   . . .
   server_name www.domain1.com;
   rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
   . . .
}

server {
   . . .
   server_name www.domain2.com;
   . . .
}

По умолчанию директива + rewrite + устанавливает временное перенаправление. Если вы хотите создать постоянное перенаправление, вы можете сделать это, заменив + redirect + на + constant + в конце директивы, например так:

Постоянные перенаправления

rewrite ^/$ http://www.domain2.com ;
rewrite ^/(.*)$ http://www.domain2.com/$1 ;

Давайте перейдем к некоторым конкретным примерам.

Пример 1 - перемещение в другой домен

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

В этом примере мы настроим перенаправление со старого домена с именем + domain1.com + на новый домен с именем + domain 2.com +. Мы будем использовать постоянные перенаправления здесь, потому что старый домен будет удален, и весь трафик с этого момента должен идти в новый домен.

Предположим, что ваш сайт настроен на обслуживание с одного домена с именем + domain1.com +, уже настроенного в Nginx, следующим образом:

/etc/nginx/sites-available/domain1.com

server {
   . . .
   server_name domain1.com;
   . . .
}

Мы также предполагаем, что вы уже обслуживаете свою будущую версию сайта по адресу + domain2.com +:

/etc/nginx/sites-available/domain2.com

server {
   . . .
   server_name domain2.com;
   . . .
}

Давайте изменим файл конфигурации серверного блока + domain 1.com +, чтобы добавить постоянное перенаправление в + domain 2.com +:

/etc/nginx/sites-available/domain1.com

server {
   . . .
   server_name domain1.com;
   rewrite ^/(.*)$ http://domain2.com/$1 permanent;
   . . .
}

Мы добавили вышеупомянутый редирект, используя директиву + rewrite . Регулярное выражение ` ^ / (. *) $ ` Соответствует всему после ` / ` в URL. Например, ` http: // domain1.com / ` будет перенаправлен на ` http: // domain2.com / `. Для достижения перенаправления перманента мы просто добавляем ` constant ` после директивы ` rewrite +`.

Пример 2. Создание постоянного интерфейса несмотря на изменения имени одной страницы

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

Давайте представим, что на вашем сайте есть две отдельные страницы для продуктов и услуг, называемые + products.html и` + services.html` соответственно. Теперь вы решили заменить эти две страницы одной страницей предложений с названием + offer.html +. Мы настроим простое перенаправление для + products.html и` + services.html` на + offer.html.

Мы предполагаем, что ваш сайт настроен следующим образом:

Предполагаемая исходная конфигурация блока сервера

server {
   . . .
   server_name example.com www.example.com;
   . . .
}

Настроить перенаправления так же просто, как использовать две директивы + Redirect +.

Перенаправления добавлены в исходную конфигурацию

server {
   . . .
   server_name example.com www.example.com;

   rewrite  ;
   rewrite  ;
   . . .
}

Директива + rewrite + принимает исходный адрес, который должен быть перенаправлен, а также адрес назначения новой страницы. Поскольку изменение здесь не является временным, в директиве мы также использовали + constant +. Вы можете использовать столько переадресаций, сколько хотите, чтобы ваши посетители не увидели ненужных ошибок «Не найдено» при перемещении содержимого сайта.

Заключение

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

Существует множество других способов использования перенаправлений HTTP, включая принудительное использование безопасных соединений SSL (т. Е. используя + https вместо` + http`) и убедившись, что все посетители окажутся только на адресе сайта с префиксом + www. +.

Правильное использование перенаправлений позволит вам использовать свое текущее присутствие в Интернете, а также при необходимости изменять структуру своего сайта. Если вы хотите узнать больше о способах перенаправления посетителей, у Nginx есть отличная документация по этой теме в разделах официального модуля rewrite. документация и official сообщение в блоге о создании редиректов.

Related