Modes de paiement Abuse

Comment rediriger un site WWW vers un site non-WW dans Nginx ?

22.02.2022, 20:05


Afin d'optimiser un site web selon les règles de référencement, il doit avoir un seul domaine. Un sous-domaine avec www est considéré comme un domaine séparé, au cas où il serait inaccessible, cela conduirait à un contenu dupliqué. Qu'est-ce que cela signifie ? Les doublons sont des éléments indésirables, qui sont souvent à l'origine d'une baisse de la position du site dans les moteurs de recherche. C'est pourquoi il est utile de procéder à une redirection du domaine www vers le domaine sans www. Ainsi, au début, le sous-domaine www était utilisé pour signifier au serveur qu'il ne pouvait pas déployer un serveur web et qu'il hébergeait le site. Aujourd'hui, cela n'est plus nécessaire. Dans cet article nous allons voir comment faire une redirection de www vers sans www avec Nginx.

Comment faire une redirection sans WWW dans NGINX

La manière la plus simple de faire une redirection dans Nginx pour un domaine www est de créer une section de serveur séparée pour celui-ci et de faire la redirection à partir de là. Par exemple :

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

Dans le cas où vous avez besoin de désigner le traitement de www et non-www dans la même section de serveur, vous pouvez utiliser une condition et une expression régulière. Lorsque la variable host commence par les lettres www, vous devez renvoyer un code de réponse 301 et un lien vers lequel l'utilisateur doit être redirigé :

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

Le code doit être ajouté à la section serveur du site pour lequel vous souhaitez mettre en place la redirection. Si vous utilisez un certificat SSL LetsEncrypt, vous devrez générer une validation pour le domaine www et le domaine non www. La demande de confirmation doit renvoyer une réponse et non une redirection. Pour ce faire, vous pouvez créer une variable $need_redirect et modifier sa valeur en fonction de quelques conditions :

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;

Lorsque l'URL contient le mot bien connu, qui est utilisé dans la demande de validation du domaine pour un certificat SSL, la redirection échouera. Sauvegardez les paramètres. Enregistrez les paramètres et redémarrez Nginx :

nginx -s reload

Ou :

sudo systemctl restart nginx

Vous pouvez ensuite tester si la redirection fonctionne en utilisant curl:

curl -I www.losst.ru

La redirection est renvoyée, le champ Emplacement contient une URL vers laquelle rediriger l'utilisateur. Mais si vous essayez d'accéder à l'URL depuis LetsEncrypt, il n'y aura pas de redirection :

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

Tout fonctionne comme prévu. C'est la fin de l'instruction.