Как создать временную и постоянную переадресацию с помощью Apache
Введение
Перенаправление HTTP — это способ указать один домен или адрес на другой. Существует несколько различных видов перенаправлений, каждый из которых означает что-то свое для клиентского браузера. Двумя наиболее распространенными типами являются временные перенаправления и постоянные перенаправления.
Временные перенаправления (код ответа 302 Found) полезны, если URL-адрес временно должен обслуживаться из другого места. Например, если вы проводите техническое обслуживание сайта, вы можете использовать временную переадресацию с вашего домена на страницу с пояснениями, чтобы информировать своих посетителей о том, что вы скоро вернетесь.
Постоянные перенаправления (код ответа 301 Moved Permanently), с другой стороны, сообщают браузеру, что он должен полностью забыть старый адрес и больше не пытаться получить к нему доступ. Это полезно, когда ваш контент был постоянно перемещен в новое место, например, когда вы меняете доменные имена.
Вы можете создать временную переадресацию в Apache, добавив такую строку в запись виртуального хоста в файле конфигурации сервера:
Redirect /oldlocation http://www.newdomain.com/newlocation
Точно так же используйте такую строку для постоянного перенаправления:
Redirect permanent /oldlocation http://www.newdomain.com/newlocation
В этом руководстве будет более подробно объяснено, как реализовать каждый вид перенаправления в Apache, а также приведены некоторые примеры для конкретных случаев использования.
Предпосылки
Чтобы следовать этому руководству, вам понадобятся:
- Один сервер с установленным и настроенным Apache 2 для обслуживания ваших веб-сайтов с виртуальными хостами. Вы можете сделать это, подписавшись на Debian 7.
Краткий обзор решения
В Apache вы можете выполнять простые одностраничные перенаправления с помощью директивы Redirect
, которая включена в модуль mod_alias
, включенный по умолчанию в новой установке Apache. Эта директива принимает как минимум два аргумента, старый URL-адрес и новый 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
. Однако это решение работает только для одной домашней страницы, а не для всего сайта.
Чтобы перенаправить более одной страницы, вы можете использовать директиву RedirectMatch
, которая использует регулярные выражения для указания целых каталогов, а не только отдельных файлов. RedirectMatch
сопоставляет шаблоны регулярных выражений в круглых скобках, а затем ссылается на совпавший текст в месте назначения перенаправления с помощью выражения $1
, где 1
— первая группа совпавших текст. В более сложных примерах последующим совпадающим группам последовательно присваиваются номера.
Например, если вы хотите временно перенаправить каждую страницу в пределах www.domain1.com
на www.domain2.com
, вы можете использовать следующее:
<VirtualHost *:80>
ServerName www.domain1.com
RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.com
. . .
</VirtualHost>
По умолчанию обе директивы Redirect
и RedirectMatch
устанавливают временную переадресацию. Если вы хотите создать постоянное перенаправление, вы можете сделать это, добавив permanent
к любой из директив:
Redirect permanent / http://www.domain2.com
RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1
Вы также можете создавать более гибкие и мощные перенаправления с помощью модуля mod_rewrite
. Это выходит за рамки данной статьи, но вы можете начать работу с mod_rewrite
в статье Как настроить mod_rewrite для Apache.
Перейдем к конкретным примерам.
Пример 1 — Переезд в другой домен
Если вы установили присутствие в Интернете и хотели бы изменить свой домен на новый адрес, лучше не отказываться от своего старого домена. Закладки на ваш сайт и ссылки на ваш сайт, расположенные на других страницах в Интернете, будут разорваны, если ваш контент исчезнет без каких-либо инструкций для браузера о том, как найти его новое местоположение. Изменение доменов без перенаправления приведет к тому, что ваш сайт потеряет трафик от предыдущих посетителей.
В этом примере мы настроим перенаправление со старого домена с именем domain1.com
на новый с именем domain2.com
. Здесь мы будем использовать постоянные перенаправления, потому что старый домен будет отключен, и с этого момента весь трафик должен идти на новый домен.
Предположим, ваш веб-сайт настроен для обслуживания из одного домена с именем domain1.com
, уже настроенного в Apache следующим образом:
<VirtualHost *:80>
ServerAdmin admin@domain1.com
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
:
<VirtualHost *:80>
ServerAdmin admin@domain2.com
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>
Давайте изменим файл конфигурации виртуального хоста domain1.com
, чтобы добавить постоянное перенаправление на domain2.com
:
<VirtualHost *:80>
ServerAdmin admin@domain1.com
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
RedirectMatch permanent ^/(.*)$ http://domain2.com/$1
</VirtualHost>
Мы добавили вышеупомянутое перенаправление с помощью директивы RedirectMatch
. Мы используем RedirectMatch
вместо простого Redirect
, чтобы гарантировать, что будут затронуты все страницы веб-сайта, а не только главная страница. Регулярное выражение ^/(.*)$
соответствует всему, что следует после /
в URL-адресе. Например, http://domain1.com/index.html
будет перенаправлен на http://domain2.com/index.html< /знак>
. Чтобы добиться постоянного перенаправления, мы просто добавляем permanent
после директивы RedirectMatch
.
Примечание. Не забудьте перезапустить Apache после изменения конфигурации с помощью systemctl restart apache2
.
Пример 2. Создание постоянного взаимодействия, несмотря на изменение имени отдельной страницы
Иногда необходимо изменить названия отдельных страниц, которые уже были опубликованы и получили трафик на вашем сайте. Изменение только имени приведет к ошибке 404 Not Found для посетителей, пытающихся получить доступ к исходному URL-адресу, но вы можете избежать этого, используя перенаправление. Это гарантирует, что люди, которые добавили ваши старые страницы в закладки или нашли их по устаревшим ссылкам в поисковых системах, по-прежнему попадут на нужную страницу.
Предположим, что на вашем веб-сайте есть две отдельные страницы для продуктов и услуг, которые называются products.html
и services.html
соответственно. Теперь вы решили заменить эти две страницы одной страницей предложения с именем offers.html
. Мы настроим простую переадресацию для products.html
и services.html
на offers.html
.
Мы предполагаем, что ваш сайт настроен следующим образом:
<VirtualHost *:80>
ServerName example.com
. . .
</VirtualHost>
Настроить перенаправления так же просто, как использовать две директивы Redirect
.
<VirtualHost *:80>
ServerName example.com
Redirect permanent /products.html /offer.html
Redirect permanent /services.html /offer.html
. . .
</VirtualHost>
Директива Redirect
принимает исходный адрес, который необходимо перенаправить, а также целевой адрес новой страницы. Поскольку изменение здесь не временное, мы также использовали permanent
в директиве. Вы можете использовать столько перенаправлений, сколько хотите, чтобы ваши посетители не видели ненужных ошибок «Не найдено» при перемещении содержимого сайта.
Заключение
Теперь у вас есть знания, как перенаправлять запросы в новые местоположения. Обязательно используйте правильный тип перенаправления, так как неправильное использование временных перенаправлений может повредить вашему поисковому рейтингу.
Существует множество других способов использования HTTP-перенаправлений, в том числе принудительное использование безопасных SSL-соединений (т. е. использование https
вместо http
) и обеспечение того, чтобы все посетители попадали только на www.
префикс адреса веб-сайта.
Правильное использование перенаправлений позволит вам использовать свое текущее присутствие в Интернете, а также позволит вам изменить структуру вашего сайта по мере необходимости. Если вы хотите узнать больше о способах перенаправления посетителей, у Apache есть отличная документация по этому вопросу в разделах официальной документации mod_rewrite.