Как перенаправить www на не-www с помощью Apache в Ubuntu 14.04
Введение
Если ваш веб-сайт или приложение запущено и работает за доменом, часто бывает желательно разрешить пользователям доступ к нему через простое доменное имя и поддомен www. То есть они должны иметь возможность посещать ваш домен как с \www, так и без него. префикс, например example.com
или www.example.com
, в веб-браузере и отображать одно и то же содержимое. Существует множество способов установить этот вверх, лучшим решением для согласованности и SEO-соображений является выбор домена, который вы предпочитаете, простой или www, и перенаправление другого домена на предпочтительный домен.Этот тип перенаправления называется постоянным перенаправлением или «перенаправлением 301». , и его можно легко настроить, правильно настроив записи ресурсов DNS и программное обеспечение веб-сервера.
В этом руководстве показано, как перенаправить URL-адрес с www на не-www, например. www.example.com
на example.com
с Apache в Ubuntu 14.04. Мы также покажем вам, как перенаправить в другом направлении, с URL-адреса без www на www. Версия этого руководства для CentOS 7 доступна здесь.
Если вы хотите выполнить этот тип перенаправления с Nginx в качестве веб-сервера, вам следует вместо этого следовать этому руководству: Как перенаправить www на не-www с помощью Nginx в Ubuntu 14.04.
Предпосылки
В этом руководстве предполагается, что у вас есть привилегии суперпользователя, т. е. sudo
или root, на сервере, на котором работает Apache. Если у вас еще нет такой настройки, следуйте этому руководству: Первоначальная настройка сервера в Ubuntu 14.04.
Предполагается, что у вас установлен Apache. Если у вас еще нет этой настройки, есть несколько руководств по этому вопросу под тегом Apache.
Вы должны иметь возможность добавлять записи в DNS, который управляет вашим доменом. Если у вас еще нет домена, вы можете приобрести его у регистратора доменов и управлять им с помощью DNS регистратора или DNS DigitalOcean для создания необходимых записей.
Давайте начнем с настройки записей DNS.
Настройка DNS-записей
Чтобы настроить желаемое перенаправление с www.example.com
на example.com
или наоборот, у вас должна быть запись A для каждого имени.
Откройте все, что вы используете для управления своим DNS. В нашем примере мы будем использовать DNS DigitalOcean.
Если запись домена (также называемая зоной) еще не существует, создайте ее сейчас. Имя хоста должно быть вашим доменом, например. example.com
, а в качестве IP-адреса должен быть установлен общедоступный IP-адрес вашего сервера Apache. Это автоматически создаст запись A, которая указывает ваш домен на указанный вами IP-адрес. Если вы используете другую систему для управления своим доменом, вам может потребоваться добавить ее вручную.
Затем добавьте еще одну запись A с \www в качестве имени хоста (или \www.example.com, если частичный субдомен не работает) и укажите тот же IP-адрес.
Когда вы создали обе записи, это должно выглядеть примерно так:
Примечание. Это также будет работать с записями CNAME, если запись A канонического имени относится к IP-адресу вашего веб-сервера Apache.
Теперь ваш сервер должен быть доступен через домен www и без www, но нам все еще нужно настроить перенаправление. Мы сделаем это сейчас.
Включить модуль перезаписи
Чтобы выполнить перенаправление 301, мы будем использовать модуль Apache mod_rewrite или Rewrite. Это гарантирует, что ваши пользователи смогут получить доступ к вашему сайту с расширением www или без него. префикс, и вы будете перенаправлены на домен, который вы предпочитаете.
Сначала включите модуль mod_rewrite с помощью этой команды:
- sudo a2enmod rewrite
С включенным модулем перезаписи мы можем настроить Apache с правилами перенаправления, используя файлы .htaccess
.
Включить файлы .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:
<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 с помощью файла .htaccess
.
Измените каталоги на ваш DocumentRoot, в нашем случае /var/www/html
:
- cd /var/www/html
Теперь откройте .htaccess
для редактирования:
- sudo vi .htaccess
Конечно, если вы не создали файл раньше, он будет пустым. В зависимости от того, в каком направлении вы хотите перенаправить, используйте один из следующих вариантов.
Вариант 1. Перенаправление с www на без www
Если вы хотите перенаправить пользователей с www на обычный домен без www, вставьте следующую конфигурацию:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Сохранить и выйти. Изменения должны вступить в силу немедленно. Обратите внимание, что если вы используете HTTPS, вы должны заменить \http в строке RewriteRule
на \https.
Используйте эту команду curl, чтобы убедиться, что домен, отличный от www, перенаправляется на домен www (замените выделенную часть вашим фактическим доменом):
curl -I http://www.example.com
Вы должны получить ответ 301 Moved Permanently
, который показывает расположение перенаправления без www, например:
Output: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
Конечно, вы должны получить доступ к своему домену в веб-браузере (с www и без www), чтобы быть уверенным.
Вариант 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, чтобы убедиться, что домен, отличный от www, перенаправляется на домен www (замените выделенную часть вашим фактическим доменом):
curl -I http://example.com
Вы должны получить ответ 301 Moved Permanently
, который показывает местоположение перенаправления www, например:
Output: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
Конечно, вы должны получить доступ к своему домену в веб-браузере (с www и без www), чтобы быть уверенным.
Заключение
Вот и все! Ваша переадресация Apache теперь настроена правильно, и ваши пользователи смогут получить доступ к вашему веб-серверу через ваш домен без www и www.
Если вы хотите узнать больше о mod_rewrite, функции Apache, которую мы использовали для реализации перенаправления, не стесняйтесь читать это руководство: Как настроить Mod_Rewrite.