Apache перенаправляет с www на без www и наоборот в Ubuntu 18.04

12 set 2022 5 min di lettura
Apache перенаправляет с www на без www и наоборот в Ubuntu 18.04
Indice dei contenuti

Введение

Когда ваш веб-сайт или приложение запущено и работает с доменом, часто предпочтительнее разрешить пользователям доступ к нему либо через простое доменное имя, либо через www. Несмотря на то, что существует множество способов его настройки, лучше всего из соображений согласованности и SEO выбрать, какой домен вы предпочитаете, простой или www, и перенаправить другой на ваш предпочтительный домен. Этот тип перенаправления называется постоянным перенаправлением или «перенаправлением 301», и его можно легко настроить, правильно настроив записи ресурсов DNS и веб-сервер.

В этом руководстве показано, как перенаправить URL-адрес с www на не-www и наоборот, например, с www.example.it на example.it с помощью Apache в Ubuntu 18.04.

Предпосылки

В этом руководстве предполагается, что у вас есть привилегии суперпользователя — sudo или root — на сервере, на котором работает Apache. Если вы еще не настроили его, следуйте этому руководству: Ubuntu 18.04 LTS Initial Setup.

Предполагается, что Apache установлен. Если он не установлен, следуйте этому руководству: Как установить LAMP (Apache MySQL PHP) на Ubuntu 18.04 LTS.

Также необходимо иметь активное и работающее доменное имя. Если записи DNS уже активны и правильно настроены, пропустите следующий абзац.

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

Чтобы установить желаемое перенаправление с www.example.it на example.it или наоборот, вам необходимо иметь запись A для каждого имени.

Имя хоста должно быть вашим доменом, например .it, а IP-адрес должен быть установлен на общедоступный IP-адрес вашего сервера Apache. Это автоматически создаст запись A, которая указывает ваш домен на указанный IP-адрес.

Затем добавьте еще одну запись A с « www » в качестве имени хоста (или «www.example.it», если только «www» не работает) и укажите тот же IP-адрес.

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

Теперь ваш сервер должен быть доступен через домен www, а не через www, но нам все еще нужно настроить перенаправление.

Включить модуль перезаписи

Чтобы выполнить перенаправление 301, мы будем использовать модуль Apache mod_rewrite. Таким образом, пользователи смогут получить доступ к вашему сайту с префиксом www или без него и будут перенаправлены на домен по своему выбору.

Сначала включите модуль mod_rewrite с помощью этой команды:

sudo a2enmod rewrite

Перезапустите Апач:

sudo service apache2 restart

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

Давайте сначала посмотрим, как настроить правила перенаправления непосредственно в файле конфигурации Apache. Если вы хотите использовать файл.htaccess для установки правил перенаправления, пропустите следующий абзац.

Перенаправление с помощью файла Apache.conf — 1-й метод

Давайте посмотрим, как создать правила перенаправления в файле конфигурации Apache без необходимости включать и создавать файл htaccess.

Откройте файл конфигурации Apache:

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

Файл должен выглядеть так:

<VirtualHost *:80>...

 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html...

 ServerName TUO_NOME_DOMINIO.it
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined...

 </VirtualHost>

Добавьте следующие строки кода перед закрытием тега </Virtualhost>, чтобы установить перенаправление с www на не-www:

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

Найдите DocumentRoot вашего сайта и запишите его. По умолчанию корневая папка (DocumentRoot ) — это /var/www/html, поэтому мы будем использовать этот каталог в нашем примере конфигурации.

Добавьте следующую директиву Directory в конец файла и обязательно замените DocumentRoot своим каталогом (если он отличается), в противном случае оставьте следующее:

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

Итак, результат будет выглядеть так:

<VirtualHost *:80>...

 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html...

 ServerName TUO_NOME_DOMINIO.it
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined...

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

 </VirtualHost>

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

Перезапустите Апач:

sudo service apache2 restart

Если вы хотите сделать обратную переадресацию, то есть с не-www на www, измените строки кода следующим образом:

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

Затем перезапустите Апач:

sudo service apache2 restart

На этом этапе перенаправление для Apache должно работать правильно, без использования файла.htaccess.

Если вы используете SSL-сертификаты, значит у вас активное соединение с протоколом HTTPS и вы хотите перенаправить с www на не-www (или наоборот) и с HTTP на HTTPS, рекомендую использовать htaccess (2-й способ, следующий абзац).

Включить файл.htaccess — 2-й способ

Если вы следовали предыдущему методу, у вас уже должна быть правильно настроенная переадресация, и вам не нужно читать дальше. Если вы хотите использовать файл.htaccess для настройки перенаправления, продолжайте чтение.

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

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

Найдите DocumentRoot вашего сайта и запишите его. По умолчанию корневая папка (DocumentRoot ) — это /var/www/html, поэтому мы будем использовать этот каталог в нашем примере конфигурации.

Добавьте следующую директиву Directory в конец файла и обязательно замените DocumentRoot своим каталогом (если он отличается), в противном случае оставьте следующее:

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

Сохраните и закройте файл, нажав CTRL + X, затем Y, чтобы сохранить изменения, а затем ENTER, если вы используете nano.

Теперь файл конфигурации должен выглядеть так:

<VirtualHost *:80>...

 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html

 ServerName example.it
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined...

 </VirtualHost>
 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet

 <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. Теперь давайте добавим правила перезаписи для редиректа.

Теперь создайте или отредактируйте файл.htaccess, чтобы включить правила перенаправления. Переместим каталоги в DocumentRoot, в нашем случае /var/www/html:

cd /var/www/html

Давайте создадим или изменим файл .htaccess:

sudo nano.htaccess

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

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

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

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

Сохраните и закройте файл, нажав CTRL + X, затем Y, чтобы сохранить изменения, а затем ENTER, если вы используете nano.

Изменения должны вступить в силу немедленно. Если вы используете HTTPS, вам нужно изменить правила следующим образом:

RewriteEngine On
 RewriteCond %{HTTPS} off [OR]
 RewriteCond %{HTTP_HOST} ^www\. [NC]
 RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
 RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

Редирект с не-www на www

Если вы хотите перенаправить пользователей с не-www на www, введите следующую конфигурацию:

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

Сохраните и закройте файл, нажав CTRL + X, затем Y, чтобы сохранить изменения, а затем ENTER, если вы используете nano.

Изменения должны вступить в силу немедленно. Если вы используете HTTPS, вам нужно изменить правила следующим образом:

RewriteEngine On
 RewriteCond %{HTTPS} off [OR]
 RewriteCond %{HTTP_HOST}!^www\. [NC]
 RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
 RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Вывод

В этом руководстве мы узнали, как настроить правила перенаправления для Apache2 с www на не-www и наоборот, а также для http на https. Мы видели два разных метода: прямое использование файла конфигурации Apache2 и использование файла.htaccess.

Это все! Перенаправление Apache теперь настроено правильно.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.