Betaalmethoden Abuse

Hoe omleiden van WWW naar niet-WW in Nginx

22.02.2022, 20:05


Om een website te optimaliseren volgens de SEO-regels, moet deze één domein hebben. Een subdomein met www wordt beschouwd als een apart domein, in het geval dat het niet toegankelijk is, zal het leiden tot duplicate content. Wat het betekent. Duplicaten - ongewenste elementen, die vaak de oorzaak worden van een daling van de positie van de site in de zoekmachines. Daarom is het de moeite waard om een redirect uit te voeren van het domein www naar zonder www. Dus in het begin werd het subdomein www gebruikt om de server aan te geven dat hij geen webserver kan implementeren en de site kan hosten. Nu is dit niet langer nodig. In dit artikel bekijken we hoe je een redirect kunt maken van www naar geen www in Nginx.

Hoe maak je een redirect zonder WWW in NGINX

De eenvoudigste manier om een redirect te maken in Nginx voor het www domein is door er een aparte serversectie voor te maken en van daaruit te redirecten. Bijvoorbeeld:

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

In het geval dat je de afhandeling van www en niet-www in dezelfde serversectie moet aanwijzen, kun je een voorwaarde en een reguliere expressie gebruiken. Als de hostvariabele de letters www aan het begin heeft, moet je een 301-antwoordcode retourneren en een koppeling waarnaar de gebruiker moet worden omgeleid:

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

De code moet worden toegevoegd aan het servergedeelte van de site waarvoor je de redirect wilt instellen. Als je een LetsEncrypt SSL-certificaat gebruikt, moet je een validatie genereren voor zowel het www-domein als het niet-www-domein. Het bevestigingsverzoek moet een antwoord terugsturen, geen redirect. Om dit te doen, kun je een variabele $need_redirect aanmaken en de waarde ervan wijzigen met een paar voorwaarden:

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;

Als de URL het woord well-known bevat, dat wordt gebruikt in de domeinvalidatieaanvraag voor een SSL-certificaat, zal de redirect mislukken. Sla de instellingen op. Sla de instellingen op en herstart Nginx:

nginx -s reload

Of:

sudo systemctl restart nginx

Je kunt vervolgens testen of de redirect werkt met behulp van curl:

curl -I www.losst.ru

De redirect komt terug, het veld Location heeft een URL om de gebruiker naar door te sturen. Maar als je de URL vanuit LetsEncrypt probeert te openen, zal er geen redirect zijn:

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

Alles werkt zoals verwacht. Dit is het einde van de instructie.