Главная >> Инструкции >> Редирект с www на без www Nginx

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

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

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

Делаем редирект с www на без www в Nginx

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

server { server_name www.losst.pro; return 301 $scheme://losst.pro$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.pro

Код редиректа возвращается, в поле Location есть URL куда надо перенаправить пользователя. Но если попытаться обратиться к URL от LetsEncrypt, то редирекнта не будет:

curl -I https://www.losst.pro/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxx

Всё работает как и ожидалось. Если вас интересует как сделать редирект с http на https, то смотрите эту статью. Как видите, всё довольно просто. Если у вас остались вопросы, спрашивайте в комментариях!

Оставьте свой Email для того чтобы получать анонсы новых статей и полезную информацию о Linux по электронной почте
Pеклама
Посмотреть детали

Если вы искали альтернативу почтовому сервису Gmail, который уважает вашу конфиденциальность, обратите внимание на ProtonMail. Ваши письма автоматически шифруются сквозным шифрованием, поэтому читать их можете только вы и получатель. ProtonMail не собирает ваши персональные данные и базируется в Швейцарии, где действуют одни из самых строгих законов о конфиденциальности. Посмотреть детали

Оставьте комментарий