РЕДИРЕКТ С WWW НА БЕЗ WWW NGINX

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

Первоначально поддомен www использовался для обозначения того, что сервер является веб-сервером и размещает веб-сайт. В этом больше нет необходимости. В этой статье описывается, как перенаправить с www на не www с помощью Nginx.

РЕДИРЕКТ С WWW НА НЕ WWW В NGINX

Самый простой способ создать перенаправление в Nginx для домена www — это создать для него отдельный раздел сервера и перенаправлять оттуда. Например:

server {
server_name linuxwin.ru;
return 301 $scheme://losst.ru$request_uri;
}

Если вы хотите работать с www и non-www в одном разделе сервера, вы можете использовать условное выражение и регулярное выражение. Если в начале переменной host стоит www, вам нужно будет вернуть код ответа 301 и ссылку для перенаправления пользователя на него:

{ if ($host ~* ^www.(.*)$) {
return 301 $scheme://$server_name$request_uri;
}

Этот код необходимо ввести в разделе серверов сайта, на который вы перенаправляетесь. Однако, если вы используете SSL-сертификат LetsEncrypt, вам потребуется подтверждение для www- и не www-доменов. Для запросов на проверку необходимо отправлять ответ, а не перенаправление. Для этого можно создать переменную $need_redirect, а затем изменять ее значение с помощью различных условий:

set $need_redirect "0";
if ($host ~* ^www\.(.*)$) {
set $need_redirect "1";
}
if ($request_uri ~* "well-known") {
set $need_redirect "0";
}
if ( $need_redirect ~ "1") {
return 301 https://$server_name$request_uri;

Теперь, если URL содержит известное слово, которое используется в запросе проверки домена для SSL-сертификата, перенаправления не будет. Сохраните настройки и перезапустите Nginx сервер:

nginx -s reload

Или:

sudo systemctl restart nginx.

Затем вы можете проверить, работает ли перенаправление с помощью curl:

curl -I www.linuxwin.ru

РЕДИРЕКТ С WWW НА БЕЗ WWW NGINX
РЕДИРЕКТ С WWW НА БЕЗ WWW NGINX

Будет возвращен код перенаправления, а поле location будет содержать URL, на который будет перенаправлен пользователь. Однако если вы попытаетесь зайти на URL LetsEncrypt, перенаправления не произойдет:

curl -I https://www.linuxwin.ru/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxx

Заключение:

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

Nazario

Я — Nazario, создатель и автор сайта linuxwin.ru, специализируюсь на информационных технологиях с акцентом на системное администрирование Linux и Windows, веб-разработку и настройку различных систем.

Linux и Windows
Выскажите своё мнение или присоединяйтесь к обсуждению:

Отправляя комментарий, вы даете согласие на обработку ваших данных в соответствии с политикой конфиденциальности и даёте согласие на их использование.