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

Published by Leave your thoughts

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

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

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

Требования

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

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

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

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

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

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

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

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

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

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

Включение модуля mod_rewrite

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

Чтобы включить модуль, используйте команду:

sudo a2enmod rewrite

Теперь можно приступать к настройке редиректа Apache.

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

Apache выполняет редиректы при помощи файла .htaccess. Откройте конфигурационный файл Apache для редактирования; в Ubuntu он находится в /etc/apache2/sites-enabled/000-default.conf:

sudo vi /etc/apache2/sites-enabled/000-default.conf

Найдите DocumentRoot сайта и запишите его (по умолчанию это каталог /var/www/html).

Затем добавьте в файл директиву Directory, указав DocumentRoot:

Add to Apache configuration
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

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

Перезапустите Apache:

sudo service apache2 restart

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

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

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

Откройте DocumentRoot:

cd /var/www/html

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

sudo vi .htaccess

Этот файл будет пуст (если только он не был создан предварительно). Выберите направление редиректа и следуйте инструкциям соответствующего раздела.

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

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

htaccess — www to non-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

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

HTTP/1.1 301 Moved Permanently
Date: Fri, 01 May 2015 21:18:33 GMT
Server: Apache/2.4.7 (Ubuntu)
Location: http://example.com/
Content-Type: text/html; charset=iso-8859-1

После этого нужно проверить переадресацию при помощи браузера.

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

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

.htaccess — non-www to 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

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

HTTP/1.1 301 Moved Permanently
Date: Fri, 01 May 2015 21:18:33 GMT
Server: Apache/2.4.7 (Ubuntu)
Location: http://www.example.com/
Content-Type: text/html; charset=iso-8859-1

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

Заключение

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

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

Tags: , , , ,

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>