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

Как перенаправить www на не-www с помощью Apache в CentOS 7


Введение

Многим веб-разработчикам необходимо разрешить своим пользователям доступ к их веб-сайту или приложению как через поддомен www, так и через корневой домен (без www). То есть пользователи должны иметь одинаковый опыт при посещении www.my-website.com и my-website.com. Хотя есть много способов настроить это, наиболее дружественное к SEO решение — выбрать, какой домен вы предпочитаете — субдомен или корневой домен — и заставить веб-сервер перенаправлять пользователей, которые посещают другой, на предпочтительный домен.

Существует множество видов HTTP-перенаправлений, но в этом случае лучше всего использовать перенаправление 301, которое сообщает клиентам: «Запрошенный вами веб-сайт навсегда перемещен на другой URL-адрес. Вместо этого перейдите туда». Как только браузер получает код ответа HTTP 301 от сервера, он отправляет второй запрос на новый URL-адрес, предоставленный сервером, и пользователь получает доступ к веб-сайту, возможно, даже не замечая, что он был перенаправлен.

Почему бы не настроить свой веб-сервер так, чтобы он просто обслуживал один и тот же веб-сайт для запросов к обоим доменным именам? Это может показаться проще, но это не дает SEO-преимуществ переадресации 301. Постоянная переадресация сообщает сканерам поисковых систем, что для вашего веб-сайта существует одно каноническое местоположение, и это улучшает поисковый рейтинг этого единственного URL-адреса.

В этом руководстве вы настроите перенаправление 301 с помощью Apache в CentOS 7. Если вы используете Nginx вместо Apache, вместо этого см. это руководство: Как перенаправить www на не-www с помощью Nginx в CentOS 7.

Предпосылки

Чтобы выполнить этот урок, вам сначала нужно:

  • Права суперпользователя на сервере с Apache. Если у вас еще нет такой настройки, следуйте нашему руководству по начальной настройке сервера с CentOS 7.
  • Apache установлен и настроен для обслуживания вашего веб-сайта. Для этого следуйте этому руководству: Как установить веб-сервер Apache в CentOS 7.
  • Зарегистрированное доменное имя. Если у вас его еще нет, вы можете получить его бесплатно из этой статьи из нашей документации, где показано, как это сделать.

Давайте начнем с настройки записей DNS.

Шаг 1 — Настройка записей DNS

Во-первых, вам нужно указать оба www.my-website.com и my-website.com на ваш сервер, на котором работает Apache. (В остальной части руководства предполагается, что ваш домен — my-website.com. Замените его своим собственным доменом везде, где вы видите его ниже.) Вы сделаете это, создав DNS-запись A для каждого имени, которое указывает на IP-адрес вашего сервера Apache.

Откройте веб-консоль вашего провайдера DNS. В этом руководстве используется DigitalOcean DNS.

В форме «Добавить домен» введите зарегистрированное доменное имя в текстовое поле и нажмите «Добавить домен». Откроется страница нового домена, где вы сможете просматривать, добавлять и удалять записи для домена.

В разделе «Создать новую запись» введите \@” в текстовом поле HOSTNAME. Это специальный символ, указывающий, что вы добавляете запись для корневого доменного имени, запись для простого my-website.com В текстовом поле WILL DIRECT TO введите публичный IPv4-адрес вашего сервера и нажмите «Создать запись» (TTL менять не нужно).

Для второй записи DNS вы можете использовать запись CNAME вместо записи A. Запись CNAME — это псевдоним, который указывает на другое имя вместо IP-адреса. Вы можете создать запись CNAME, которая направляет www.my-website.com на my-website.com, и любой HTTP-запрос для субдомена www попадет на ваш сервер. поскольку вы только что создали запись A для корневого домена. Но для простоты просто создайте еще одну запись A, подобную первой, введя \www в поле HOSTNAME и общедоступный IP-адрес сервера в поле WILL DIRECT TO.

Когда вы создали обе записи, это должно выглядеть примерно так:

При наличии двух записей веб-запросы как для my-website.com, так и для www.my-website.com должны достигать вашего сервера Apache. Теперь давайте настроим сервер.

Шаг 2 — Настройка перенаправления в Apache

Веб-сервер Apache предоставляет два модуля, помогающих настроить перенаправления: mod_alias и mod_rewrite. Хотя mod_rewrite более мощный, mod_alias проще понять и использовать. Если вам нужно перенаправить запросы, содержащие определенные строки запроса, например, или заголовки HTTP, вам нужно будет использовать mod_rewrite. Многие выбирают mod_rewrite из-за его возможностей сопоставления регулярных выражений, которых нет в mod_alias. Но для простого случая перенаправления всех запросов для www.my-website.com на my-website.com mod_alias подойдет. (Сам Apache рекомендует выбирать mod_alias, когда это возможно, говоря, что выбор mod_rewrite, когда это не нужно, «приводит к запутанным, хрупким и сложным в обслуживании конфигурациям».)

Модуль должен быть включен по умолчанию в CentOS 7, но для двойной проверки выполните следующую команду:

  1. httpd -M | grep alias_module

Если в выходных данных появляется alias_module (shared), модуль уже включен. Если нет, включите его, добавив эту строку в /etc/httpd/conf.modules.d/00-base.conf:

  1. echo “LoadModule alias_module modules/mod_alias.so” | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf

С включенным mod_alias вы можете использовать директивы Redirect, RedirectMatch и другие, перечисленные в документах mod_alias в вашем Конфигурация апача.

Теперь давайте настроим ваши VirtualHost.

Как указано в предварительных требованиях, ваш веб-сайт уже должен быть настроен в Apache. Он может быть настроен в основном файле конфигурации Apache (/etc/httpd/conf/httpd.conf) или, возможно, в собственном файле (например, /etc/httpd/conf.d/ my-website.com.conf). Если для настройки VirtualHost вы использовали руководство по установке Apache, указанное в разделе «Предварительные условия», оно может находиться в файле типа /etc/httpd/sites-available/my-website. com.conf. Где бы ни был настроен ваш основной сайт, откройте этот файл в vi или в вашем любимом редакторе (yum install nano, если хотите):

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

Найдите все директивы ServerAlias, установленные в VirtualHost. Если вы найдете строку, для которой ServerAlias установлен на www.my-website.com, удалите эту строку. (Или, если эта строка содержит много псевдонимов в списке, разделенном запятыми, удалите из списка только www.my-website.com.) Вам нужно удалить этот псевдоним потому что вы собираетесь создать отдельный VirtualHost для поддомена, не содержащий ничего, кроме ServerName и Redirect. Основной VirtualHost для сайта больше не будет обслуживать запросы для www.my-website.com.

Теперь создайте VirtualHost в отдельном файле (например, /etc/httpd/conf.d/www.my-website.com.conf) :

  1. sudo vi /etc/httpd/conf.d/www.my-website.com.conf

Вставьте в файл следующее содержимое, заменив my-website.com своим собственным доменным именем:

<VirtualHost *:80>
    ServerName www.my-website.com
    Redirect permanent / http://my-website.com/
</VirtualHost>

Сохраните и выйдите, когда закончите. Если вы создали этот файл в /etc/httpd/sites-available, в соответствии с нашим руководством по установке Apache, создайте символическую ссылку на файл в /etc/httpd/sites-enabled/:

  1. sudo ln -s /etc/httpd/sites-available/www.my-website.com.conf /etc/httpd/sites-enabled/

Этот новый VirtualHost настраивает Apache для отправки переадресации 301 всем клиентам, запрашивающим www.my-website.com, и направляет их на посещение my-website.com. вместо этого. Перенаправление сохраняет URI запроса, поэтому запрос на http://www.my-website.com/login.php будет перенаправлен на http://my-website.com. /логин.php.

Примечание: если основной VirtualHost вашего сайта содержит ServerAlias с субдоменом с подстановочными знаками — *.my-website.com — вам следует рассмотреть возможность его удаления и создайте новый VirtualHost, подобный тому, который вы только что создали, для каждого субдомена, который вы хотите перенаправить. Если вы не хотите перенаправлять все поддомены и хотите, чтобы некоторые из них продолжали обслуживаться основным VirtualHost, лучше явно назвать каждый поддомен псевдонимом, особенно теперь, когда у вас есть один поддомен. чьи запросы вы не хотите непреднамеренно сопоставлять с основным VirtualHost. (Вы можете назвать каждый субдомен в отдельной строке ServerAlias или указать их все в виде списка, разделенного запятыми, в одной строке ServerAlias.)

Если вы должны сохранить ServerAlias для *.my-website.com, вам нужно убедиться, что Apache загружает новый www VirtualHost перед основным one, потому что если основной загружается первым, Apache будет использовать его для обработки запросов на www.my-website.com, поскольку это имя соответствует псевдониму с подстановочными знаками. Выполните следующую команду, чтобы увидеть, какой VirtualHost будет загружен первым после перезапуска Apache:

  1. httpd -S

Найдите строки, содержащие namevhost my-website.com и namevhost www.my-website.com. Если строка www появляется первой, все готово. Однако, если VirtualHost для корневого домена появляется первым, есть несколько способов заставить Apache сначала загрузить www:

  1. Если ваш основной VirtualHost содержится в файле (например, /etc/httpd/conf/httpd.conf), который использует Include или IncludeOptional, чтобы включить каталог, содержащий ваш новый www VirtualHost, просто переместите эту строку Include над основным VirtualHost внутри файла.
  2. Если ваш основной файл VirtualHost и ваш новый файл www VirtualHost находятся в одном и том же каталоге (например, /etc/httpd/conf.d/), вы можете заставить Apache сначала загрузить www, переименовав файлы и добавив некоторые числа к именам файлов. Добавьте 01- к имени файла www VirtualHost (например, /etc/httpd/conf.d/01-www.my-website.com. conf) и 02- в имя файла основного VirtualHost (например, /etc/httpd/conf.d/02-my- веб-сайт.com.conf).

Запустите httpd -S еще раз, чтобы убедиться, что www VirtualHost появляется первым.

Когда будете готовы, перезапустите Apache:

  1. sudo systemctl restart httpd

Прежде чем посетить www.my-website.com в своем браузере, сделайте запрос, используя curl либо на своем сервере, либо на локальном компьютере (если curl устанавливается локально):

  1. curl -IL http://www.my-website.com

Флаг -I указывает curl показывать только заголовки из ответа сервера. Флаг -L указывает curl подчиняться любым перенаправлениям с сервера, автоматически делая второй запрос, на этот раз по URL-адресу, указанному в Location. заголовок (так же, как это сделал бы веб-браузер). Поскольку вы настроили перенаправление 301, curl должен сделать два запроса, и вы должны увидеть только заголовки двух ответов:

Output
HTTP/1.1 301 Moved Permanently Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Location: http://my-website.com/ Content-Type: text/html; charset=iso-8859-1 HTTP/1.1 200 OK Date: Tue, 03 Jan 2023 19:24:44 GMT Server: Apache/2.4.53 Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT ETag: "39-5eecb7ed6bfc9" Accept-Ranges: bytes Content-Length: 57 Content-Type: text/html; charset=UTF-8

В ответе 301 (перемещено навсегда) на исходный запрос к http://www.my-website.com обратите внимание на предпоследний заголовок: Расположение: http://my- сайт.com. Второй ответ исходит от последующего запроса curl на URL-адрес, указанный в этом заголовке Location, и, если ваш веб-сайт исправен, сервер должен был ответить 200 (ОК) .

Наконец, посетите http://www.my-website.com в своем веб-браузере. Моргни, и ты пропустишь перенаправление. Ваш веб-сайт должен отображаться как обычно, но еще раз взгляните в адресную строку и обратите внимание, что в URL-адресе отсутствует \www. >http://мой-сайт.com.

Заключение

В этом руководстве вы добавили две записи DNS для своего веб-сайта и настроили Apache для перенаправления дополнительного домена на ваш предпочтительный домен. Теперь ваш сайт доступен через оба домена. Возможно, это уже было до того, как вы прочитали этот урок; возможно, вы обслуживали его напрямую с обоих доменных имен. Но с помощью всего лишь четырех строк конфигурации Apache вы улучшили репутацию своего веб-сайта в глазах поисковых систем и, таким образом, представили его большему количеству пользователей в Интернете.

Хотите узнать о более мощном модуле mod_rewrite? Ознакомьтесь с нашим руководством Как переписать URL-адреса с помощью mod_rewrite для Apache в Ubuntu 22.04.