С целью оптимизации сайта по правилам SEO у него должен быть один домен. Поддомен с www считается отдельным доменом, в том случае, если он будет недоступен, это приведет к появлению дублей контента. Что это значит? Дубли - нежелательные элементы, часто становящиеся причиной снижения позиций сайта в выдаче поисковых систем. Вот почему стоит делать редирект с домена www на без www. Так в начале поддомен www использовался с целью обозначения сервера, что он не может развернуть веб-сервер и размещён сайт. Сейчас в этом отпала необходимость. В этой статье мы рассмотрим как сделать редирект с www на без www Nginx.
Наиболее простейший способ - сделать редирект в Nginx для www домена это создать отдельную секцию server для него и уже оттуда выполнять редирект. Например:
server {
server_name www.losst.ru;
return 301 $scheme://losst.ru$request_uri;
}
В том случае, когда необходимо обозначить обработку www и не www в одной секции server, можно использовать условие и регулярное выражение. Когда в начале переменной хост находятся буквы www, то нужно вернуть код ответа 301 и ссылку на, которую следует перенаправить пользователя:
if ($host ~* ^www\.(.*)$) {
return 301 $scheme://$server_name$request_uri;
}
Код следует добавить в секцию server сайта, для которого следует настроить редирект. Если же вы используете 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 содержит слово well-known, которое используется в запросе подтверждения домена для SSL сертификата, редирект не выполнится. Сохраните настройки. Сохраните настройки и перезапустите Nginx:
nginx -s reload
Или:
sudo systemctl restart nginx
После этого можно проверить работает ли редирект с помощью curl
:
curl -I www.losst.ru
Редирект будет возвращаться, в поле Location есть URL куда надо перенаправить пользователя. Но если попытаться обратиться к URL от LetsEncrypt, то редиректа не будет:
curl -I https://www.losst.ru/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxx
Все работает по плану, как и ожидалось. На этом инструкцию можно считать завершенной.