Redirection www vers non-www et HTTP vers HTTPS

L’adoption croissante du protocole HTTPS en tant que protocole de connexion par défaut pour les sites Web a introduit quelques nouveaux défis pour les développeurs et les administrateurs système, tels que la nécessité de consolider un domaine canonique en redirigeant les sites non HTTP vers HTTPS. Nom d’hôte www (ou vice-versa).

Introduction

Vu que j’ai galéré sur le web avant de trouver la solution, je vous donne ma solution ici, je montre comment rediriger un site www vers une version sans www (ou viceversa) et de HTTP vers HTTPS, en utilisant la configuration du serveur Apache. Pour être plus clair, la configuration redirigera les noms d’hôte suivants:

http://example.com
http://www.example.com
https://www.example.com

à

https://example.com

Je vais également montrer un petit changement pour rediriger le non-www vers la version www, si vous préférez le www.

Configuration d’Apache

Pour configurer les redirections, ajoutez la règle de redirection suivante au fichier de configuration Apache si vous y avez accès ou à .htaccess à la racine de votre site:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

Si au lieu de cela example.com vous voulez que l’URL par défaut soit www.example.com, changez simplement les troisième et cinquième lignes:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Comment ça marche ?

Comme je ne suis pas un grand fan des didacticiels couper-coller, essayons de comprendre comment fonctionne la configuration. Cela vous aiderait à apporter les modifications nécessaires, si nécessaire.

RewriteEngine On

La première ligne active le moteur de réécriture runtime Apache nécessaire pour effectuer la redirection. Vous l’avez peut-être déjà activé dans une configuration précédente du même fichier. Si tel est le cas, vous pouvez ignorer cette ligne.

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]

Ces deux lignes sont les conditions de redirection, elles sont utilisées pour déterminer si la demande doit être redirigée. Comme les conditions sont jointes avec un [OR], si l’une de ces deux conditions renvoie true, Apache exécutera la règle de réécriture (la redirection).

La première condition détermine si la demande utilise une URL non HTTPS. La deuxième condition détermine si la demande utilise l’ URL www. Notez que j’ai utilisé www\. et non www., car le motif est une expression régulière et le . a une signification particulière ici, il doit donc être échappé.

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]

La quatrième ligne est une ligne pratique que j’utilisais pour éviter de référencer le nom d’hôte directement dans l’URL. Il correspond à l’hôte de la demande entrante et le décompose en partie www (le cas échéant), et le reste du nom d’hôte. Nous le référencerons plus tard %1 dans le RewriteRule.

Si vous connaissez le nom d’hôte à l’avance, vous pouvez améliorer la règle en insérant l’URL et en ignorant cette condition (voir plus loin).

RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Le RewriteRule est le coeur de la redirection. Avec cette ligne, nous indiquons à Apache de rediriger toute requête vers une nouvelle URL, composée de :

  • https: // www.
  • %1: la référence à la partie non-www de l’hôte
  • %{REQUEST_URI}: l’URL de la requête, sans le nom d’hôte

Tous ces jetons sont joints ensemble et représentent l’URL de redirection finale. Enfin, nous ajoutons 3 drapeaux :

  • NE ne pas échapper à des caractères spéciaux
  • R=301 utiliser le statut de redirection HTTP 301
  • L arrêter le traitement d’autres règles et rediriger immédiatement

Remarques

Comme je l’ai déjà mentionné, mon exemple utilise une RewriteCond, ligne supplémentaire pour extraire le nom d’hôte et éviter d’inclure le nom d’hôte dans la règle. Si vous estimez que c’est une pénalité de performance pour vous, vous pouvez directement inclure l’hôte dans la règle :

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]

Conclusion

Cet article fournit une configuration simple pour rediriger les requêtes www et non-HTTPS vers le domaine du site canonique. Ceci est très utile pour éviter les problèmes de duplication de contenu avec les moteurs de recherche et offrir une expérience améliorée à vos utilisateurs.

Si vous effectuez une recherche en ligne, il existe des dizaines de façons d’effectuer une redirection dans Apache, ce n’est qu’une des possibilités et cela peut ne pas couvrir tous les cas possibles. Si tout va bien, avec l’explication dans la section Comment ça marche, vous pourrez la personnaliser selon vos besoins.

 

Black-Fish Écrit par :

Expert Seo - Ma motivation se trouve en première position sur Google !

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.