Поиск по сайту:

Как перенаправить 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 с помощью этой команды:

  1. sudo a2enmod rewrite

С включенным модулем перезаписи мы можем настроить Apache с правилами перенаправления, используя файлы .htaccess.

Включить файлы .htaccess

Откройте файл конфигурации Apache для редактирования. В Ubuntu файл конфигурации по умолчанию находится в /etc/apache2/sites-enabled/000-default.conf, поэтому мы будем использовать его в нашем примере:

  1. 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, чтобы изменения вступили в силу:

  1. sudo service apache2 restart

Теперь Apache настроен на чтение файлов .htaccess, расположенных в любом месте каталога /var/www/html. Давайте добавим наши правила перезаписи.

Настроить модуль перезаписи

Как мы упоминали ранее, мы настроим модуль Rewrite с помощью файла .htaccess.

Измените каталоги на ваш DocumentRoot, в нашем случае /var/www/html:

  1. cd /var/www/html

Теперь откройте .htaccess для редактирования:

  1. 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.