З метою оптимізації сайту за правилами 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
Усе працює за планом, як і очікувалося. На цьому інструкцію можна вважати завершеною.