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.
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.