Metody płatności Abuse

Jak przekierować z WWW na non-WW w Nginx

22.02.2022, 20:05


Aby zoptymalizować stronę internetową zgodnie z zasadami SEO, musi ona mieć jedną domenę. Subdomena z www jest uważana za oddzielną domenę, w przypadku gdy jest niedostępna, doprowadzi to do duplikacji treści. Co to oznacza. Duplikaty - niechciane elementy, często stające się przyczyną spadku pozycji strony w wyszukiwarkach. Dlatego warto zrobić przekierowanie z domeny www na bez www. Tak więc na początku subdomena www była używana do oznaczenia serwera, że nie może on wdrożyć serwera WWW i hostować witryny. Teraz nie jest to już konieczne. W tym artykule przyjrzymy się, jak zrobić przekierowanie z www na bez www Nginx.

Jak zrobić przekierowanie bez WWW w NGINX

Najprostszym sposobem na wykonanie przekierowania w Nginx dla domeny www jest utworzenie dla niej osobnej sekcji serwera i przekierowanie z niej. Na przykład:

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

W przypadku, gdy trzeba wyznaczyć obsługę www i non-www w tej samej sekcji serwera, można użyć warunku i wyrażenia regularnego. Gdy zmienna hosta ma na początku litery www, należy zwrócić kod odpowiedzi 301 i link, do którego użytkownik powinien zostać przekierowany:

if ($host ~* ^www.(.*)$) {
return 301 $scheme://$server_name$request_uri;
}

Kod należy dodać do sekcji serwera witryny, dla której ma zostać skonfigurowane przekierowanie. Jeśli korzystasz z certyfikatu SSL LetsEncrypt, będziesz musiał wygenerować walidację zarówno dla domeny www, jak i domeny innej niż www. Żądanie potwierdzenia powinno zwrócić odpowiedź, a nie przekierowanie. Aby to zrobić, możesz utworzyć zmienną $need_redirect, a następnie zmienić jej wartość za pomocą kilku warunków:

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;

Jeśli adres URL zawiera słowo well-known, które jest używane w żądaniu walidacji domeny dla certyfikatu SSL, przekierowanie nie powiedzie się. Zapisz ustawienia. Zapisz ustawienia i uruchom ponownie Nginx:

nginx -s reload

Lub:

sudo systemctl restart nginx

Następnie można przetestować, czy przekierowanie działa przy użyciu curl:

curl -I www.losst.ru

Przekierowanie powróci, pole Lokalizacja ma adres URL, na który można przekierować użytkownika. Ale jeśli spróbujesz uzyskać dostęp do adresu URL z LetsEncrypt, nie będzie przekierowania:

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

Wszystko działa zgodnie z oczekiwaniami. Na tym kończy się instrukcja.