По соображениям 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
Будет возвращен код перенаправления, а поле location будет содержать URL, на который будет перенаправлен пользователь. Однако если вы попытаетесь зайти на URL LetsEncrypt, перенаправления не произойдет:
curl -I https://www.linuxwin.ru/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxx
Заключение:
Наконец все работает так, как ожидалось. Как вы можете увидеть, все довольно просто. Если в ставить несколько строк кода в нужное место, все будет хорошо. Если у вас вдруг остались вопросы, не стесняйтесь задавать их в комментариях, мы постараемся очень быстро ответить!