Редирект домена с www на без www на Apache в CentOS 7

Когда сайт или приложение запущено на домене, часто возникает необходимость позволить пользователям открывать его при помощи простого домена и поддомена www. То есть, пользователи должны иметь возможность посетить домен и с префиксом www, и без него (например: example.com или www.example.com), и при этом получить доступ к одному и тому же контенту. Существует множество способов решения этой проблемы. Лучше всего заранее определиться, какой домен вам подходит больше (с префиксом или без), а затем настроить переадресацию второго домена на основной. Такой редирект называется постоянным (Permanent Redirect), или 301. Его настройки содержатся в конфигурациях DNS и веб-сервера.

Это руководство покажет, как настроить редирект URL-а с префиксом www на URL без префикса на веб-сервере Apache в системе CentOS 7 (например, с www.example.com на example.com).

Примечание: Аналогичную статью для Ubuntu 14.04 можно найти по этой ссылке. Чтобы настроить такую переадресацию на веб-сервере Nginx в CentOS 7, читайте данную статью.

Требования

Для выполнения инструкций нужны права суперпользователя (sudo или root). Подробнее об этом можно узнать в статье «Начальная настройка сервера CentOS 7».

Кроме того, нужно предварительно установить Apache. Полезные статьи по установке и настройке этого веб-сервера можно найти в специальном разделе данного сайта.

Также нужно иметь возможность добавлять DNS-записи.

Настройка DNS-записи

Чтобы настроить редирект с www.example.com на example.com (или наоборот), нужно создать запись для каждого имени.

Откройте панель управления DNS.

Если записи домена ещё не существует, создайте её сейчас. В hostname укажите доменное имя (к примеру, example.com), в поле IP address нужно указать внешний IP-адрес сервера Apache. Некоторые системы создают запись A, которая указывает на заданный IP-адрес, автоматически, а некоторые требуют создавать эти записи вручную.

Затем создайте еще одну запись А, на этот раз для адреса с префиксом www, указав тот же IP-адрес.

Примечание: Такой редирект работает и с записями CNAME, поскольку запись А канонического имени привязана к IP-адресу веб-сервера Apache.

Теперь сервер доступен по двум доменам: с префиксом www и без него. Можно начинать настройку редиректа.

Настройка редиректа Apache

Для настройки редиректа 301 в Apache используется модуль mod_rewrite, который позволяет переадресовывать пользователей на любой необходимый домен (в том числе и на домен без префикса www).

В системе CentOS 7 модуль Rewrite включен по умолчанию. Если же в вашем случае это по какой-либо причине не так, внесите следующую строку в раздел modules конфигураций Apache (по умолчанию /etc/httpd/conf.modules.d/00-base.conf):

LoadModule rewrite_module modules/mod_rewrite.so

Включение файла .htaccess

Apache выполняет редиректы при помощи файла .htaccess. Для включения этой функции нужно понизить права каталога DocumentRoot.

Откройте конфигурационный файл Apache для редактирования; в системе CentOS он находится в /etc/httpd/conf/httpd.conf:

sudo vi /etc/httpd/conf/httpd.conf

Если сайт находится в стандартном DocumentRoot (/var/www/html), найдите блок кода <directory “/var/www/html>. В нём измените AllowOverride None на AllowOverride All:

<Directory /var/www/html>
...
AllowOverride All
...
</Directory>

Сохраните и закройте файл.

Перезапустите Apache, чтобы обновить настройки:

sudo systemctl restart httpd

Теперь Apache настроен для чтения .htaccess, находящихся в любом подкаталоге каталога /var/www/html. Теперь добавьте правила Rewrite.

Настройка модуля Rewrite

Теперь можно настроить модуль Rewrite при помощи включённого файла .htaccess .

Перейдите в DocumentRoot:

cd /var/www/html

Затем откройте .htaccess для редактирования:

sudo vi .htaccess

Конечно, этот файл будет пуст (если только он не был создан предварительно). Выберите направление редиректа и следуйте соответствующему разделу.

1: Редирект с www на без www

Чтобы настроить редирект пользователей с домена с префиксом www на домен без него, внесите следующий код:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Сохраните и закройте файл. Изменения немедленно вступят в силу. Обратите внимание: при использовании HTTPS необходимо заменить http в строке RewriteRule на https.

Затем используйте следующую команду curl, чтобы убедиться, что редирект настроен верно (не забудьте указать свой домен):

curl -I http://www.example.com

На экране должен появиться такой вывод, сообщающий о точке переадресации:

Output:
HTTP/1.1 301 Moved Permanently
Date: Mon, 04 May 2015 16:04:56 GMT
Server: Apache/2.4.6 (CentOS)
Location: http://example.com/
Content-Type: text/html; charset=iso-8859-1

Обязательно проверьте переадресацию в браузере.

2: Редирект домена без www на домен с www

Чтобы настроить переадресацию пользователей с обычного домена без префикса www на домен с www, добавьте в файл:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Сохраните и закройте файл, после чего изменения будут активированы. При использовании HTTPS не забудьте заменить http в строке RewriteRule на https.

Затем используйте следующую команду curl, чтобы убедиться, что редирект настроен верно (не забудьте указать свой домен):

curl -I http://example.com

На экране появится сообщение, которое показывает, что точкой редиректа является домен с префиксом:

Output:
HTTP/1.1 301 Moved Permanently
Date: Mon, 04 May 2015 16:05:26 GMT
Server: Apache/2.4.6 (CentOS)
Location: http://www.example.com/
Content-Type: text/html; charset=iso-8859-1

Конечно, необходимо также проверить редирект в браузере.

Заключение

Как видите, настройка редиректа на сервере Apache – довольно простой процесс. Теперь ваш сайт доступен по двум доменам: с префиксом и без него.

Чтобы получить более подробную информацию о mod_rewrite, читайте руководство «Настройка Mod_Rewrite».

Tags: , , ,

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