Metode de plată Abuse

Cum să redirecționați de la WWW la non-WW în Nginx

22.02.2022, 20:05


Pentru a optimiza un site web în conformitate cu normele SEO, acesta trebuie să aibă un singur domeniu. Un subdomeniu cu www este considerat un domeniu separat, în cazul în care acesta este inaccesibil, va duce la conținut duplicat. Ce înseamnă. Duplicaturile - elemente nedorite, devenind adesea cauza scăderii poziției site-ului în motoarele de căutare. De aceea merită să faceți o redirecționare de la domeniul www la fără www. Deci, la început, subdomeniul www a fost folosit pentru a semnifica serverului că el nu poate implementa un server web și a găzduit site-ul. Acum acest lucru nu mai este necesar. În acest articol ne vom uita la modul de a face o redirecționare de la www la fără www Nginx.

Cum să efectuați o redirecționare fără WWW în NGINX

Cel mai simplu mod de a face o redirecționare în Nginx pentru domeniul www este să creați o secțiune de server separată pentru acesta și să redirecționați de acolo. De exemplu:

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

În cazul în care trebuie să desemnați gestionarea domeniilor www și non-www în aceeași secțiune de server, puteți utiliza o condiție și o expresie regulată. Atunci când variabila host are literele www la început, ar trebui să returnați un cod de răspuns 301 și un link către care utilizatorul ar trebui să fie redirecționat:

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

Codul ar trebui adăugat la secțiunea server a site-ului pentru care doriți să configurați redirecționarea. Dacă utilizați un certificat SSL LetsEncrypt, va trebui să generați o validare atât pentru domeniul www, cât și pentru domeniul non-www. Cererea de confirmare trebuie să returneze un răspuns, nu o redirecționare. Pentru a face acest lucru, puteți crea o variabilă $need_redirect și apoi să-i modificați valoarea cu câteva condiții:

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;

Atunci când URL-ul conține cuvântul well-known, care este utilizat în cererea de validare a domeniului pentru un certificat SSL, redirecționarea va eșua. Salvați setările. Salvați setările și reporniți Nginx:

nginx -s reload

Sau:

sudo systemctl restart nginx

Puteți testa apoi dacă redirecționarea funcționează utilizând curl:

curl -I www.losst.ru

Redirecționarea va reveni, câmpul Location are un URL către care să redirecționeze utilizatorul. Dar dacă încercați să accesați URL-ul din LetsEncrypt, nu va exista nicio redirecționare:

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

Totul funcționează conform așteptărilor. Acesta este sfârșitul instrucțiunii.