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

Вступление

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

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

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

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

Redirect

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

Redirect permanent

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

Предпосылки

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

  • Один сервер с установленным и настроенным Apache 2 для обслуживания вашего веб-сайта (ов) с виртуальными хостами. Вы можете сделать это, следуя Как настроить виртуальные хосты Apache в Ubuntu 16.04, on CentOS 7 или https: //www.digitalocean .com / community / tutorials / how-to-set-up-apache-virtual-hosts-on-debian-7 [в Debian 7].

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

В Apache вы можете выполнять простые одностраничные перенаправления с помощью директивы + Redirect +, которая включена в модуль + mod_alias +, который по умолчанию включен в новой установке Apache. Эта директива принимает как минимум два аргумента, старый URL и новый URL, и может использоваться для создания как временных, так и постоянных перенаправлений.

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

Временный редирект с помощью Redirect

<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 +. Это решение, однако, работает только для одной домашней страницы, а не для всего сайта.

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

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

Временное перенаправление с RedirectMatch

<VirtualHost *:80>
   ServerName www.domain1.com
   RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>

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

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

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

Redirect  / http://www.domain2.com
RedirectMatch  ^/(.*)$ http://www.domain2.com/$1

Вы также можете создавать более гибкие и мощные перенаправления с помощью модуля + mod_rewrite +. Это выходит за рамки данной статьи, но вы можете начать с + mod_rewrite + в https://www.digitalocean.com/community/tutorials/how-to-set-up-mod_rewrite-for-apache-on -ubuntu-14-04 [Как настроить mod_rewrite для Apache].

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

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

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

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

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

/etc/apache2/sites-available/domain1.com.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName domain1.com
   ServerAlias www.domain1.com
   DocumentRoot /var/www/domain1.com/public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

/etc/apache2/sites-available/domain2.com.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName domain2.com
   ServerAlias www.domain2.com
   DocumentRoot /var/www/domain2.com/public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

/etc/apache2/sites-available/domain1.com.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName domain1.com
   ServerAlias www.domain1.com
   DocumentRoot /var/www/domain1.com/public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

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

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

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

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

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

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

<VirtualHost *:80>
   ServerName example.com
   . . .
</VirtualHost>

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

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

<VirtualHost *:80>
   ServerName example.com



   . . .
</VirtualHost>

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

Заключение

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

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

Правильное использование перенаправлений позволит вам использовать свое текущее присутствие в Интернете, а также при необходимости изменять структуру своего сайта. Если вы хотите узнать больше о способах перенаправления посетителей, у Apache есть отличная документация по этому вопросу в mod_alias и http: //httpd.apache.org/docs/current/mod/mod_rewrite.html[mod_rewrite] разделы официальной документации.

Related