Начини на плащане Abuse

Как да пренасочим от WWW към не-WW в Nginx

22.02.2022, 20:05


За да се оптимизира даден уебсайт според правилата на SEO, той трябва да има един домейн. Поддомейн с www се счита за отделен домейн, в случай че е недостъпен, това ще доведе до дублиране на съдържанието. Какво означава това. Дубликати - нежелани елементи, които често стават причина за намаляване на позицията на сайта в търсачките. Ето защо си струва да направите пренасочване от домейна www към без www. Така че в началото поддомейнът www се използваше, за да означи на сървъра, че той не може да разположи уеб сървър и да хоства сайта. Сега това вече не е необходимо. В тази статия ще разгледаме как да направим пренасочване от домейна www към без www Nginx.

Как да направим пренасочване без WWW в NGINX

Най-простият начин да направите пренасочване в Nginx за www домейн е да създадете отделна секция на сървъра за него и да пренасочвате оттам. Например:

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

В случай че трябва да определите обработката на www и не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 адресът съдържа думата 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

Всичко работи, както се очаква. Това е краят на инструкцията.