Aller au contenu principal

Redirections et .htaccess

Une redirection envoie les visiteurs et les moteurs de recherche d’une adresse vers une autre, par exemple d’une ancienne page vers son nouvel emplacement, ou de http:// vers https://. Ce guide explique quel type de redirection utiliser et comment écrire des règles de redirection dans un fichier .htaccess. Il s’adresse aux propriétaires de sites qui gèrent eux-mêmes leur site sur un hébergement web.

301 ou 302​

Quand un navigateur demande une adresse redirigée, le serveur répond avec un code d’état et la nouvelle adresse.

CodeSignificationÀ utiliser quand
301 Moved PermanentlyL’adresse a changé définitivementUne page a été déplacée, vous avez changé de domaine, ou vous forcez HTTPS ou une seule version avec ou sans www
302 Found (temporaire)Allez ailleurs pour l’instant ; l’adresse d’origine reste validePages de maintenance, campagnes courtes ou tests

Les moteurs de recherche considèrent une 301 comme le signal de remplacer l’ancienne adresse par la nouvelle. Les navigateurs peuvent aussi mémoriser une 301 longtemps : testez donc les nouvelles règles avec une 302 d’abord, puis passez en 301 une fois qu’elles fonctionnent.

Qu’est-ce que .htaccess​

.htaccess est un fichier de configuration lu par le serveur web Apache, et par les serveurs compatibles avec ses règles, comme LiteSpeed. Il se trouve dans un dossier du site, généralement la racine, et ses règles s’appliquent à ce dossier et à tout ce qu’il contient. Son nom commence par un point : les applications de transfert de fichiers peuvent donc le masquer tant que vous n’affichez pas les fichiers cachés.

Les règles de redirection ci-dessous utilisent mod_rewrite, un module Apache qui réécrit et redirige les adresses à partir de motifs.

Tous les serveurs ne lisent pas .htaccess

Les serveurs qui utilisent nginx ignorent les fichiers .htaccess. Sous nginx, les redirections se placent dans la configuration du serveur, que vous pouvez modifier sur un VPS ou un serveur cloud mais généralement pas en hébergement mutualisé. Si vos règles n’ont aucun effet, demandez à votre hébergeur quel serveur web utilise votre site.

Avant de modifier​

  1. Téléchargez une copie du fichier .htaccess actuel et gardez-la sur votre ordinateur.
  2. Vérifiez si votre application web écrit déjà des règles dans le fichier. WordPress, par exemple, conserve son propre bloc entre # BEGIN WordPress et # END WordPress. Placez vos règles au-dessus de ce bloc, jamais à l’intérieur.
  3. Faites une seule modification à la fois, enregistrez et testez dans une fenêtre de navigation privée.
Une faute de frappe peut mettre votre site hors ligne

Une seule erreur dans .htaccess fait généralement afficher une 500 Internal Server Error sur toutes les pages. Si cela arrive, téléversez la copie que vous avez gardée, ou supprimez les lignes que vous venez d’ajouter, et le site revient.

Rediriger HTTP vers HTTPS​

Une fois que votre site dispose d’un certificat SSL fonctionnel, envoyez tous les visiteurs vers l’adresse sécurisée :

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond pose une condition (la requête n’utilise pas HTTPS) et RewriteRule effectue la redirection. R=301 la rend permanente et L empêche les règles suivantes de s’exécuter pour cette requête.

Si votre site se trouve derrière un proxy ou un CDN qui gère HTTPS pour lui, cette condition peut provoquer une boucle de redirection. Dans ce cas, utilisez le réglage HTTPS du proxy ou du CDN, ou suivez les recommandations de votre hébergeur.

Choisir www ou sans www​

Choisissez une seule version de votre adresse et redirigez l’autre vers elle, pour que les visiteurs et les moteurs de recherche voient un seul site.

Pour envoyer www.example.com vers example.com :

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

Pour envoyer example.com vers www.example.com :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

NC fait ignorer la différence entre majuscules et minuscules. Les deux noms ont besoin d’enregistrements DNS et doivent être couverts par votre certificat SSL, voir Relier un domaine à un site web. RewriteEngine On ne doit figurer qu’une fois par fichier : si vous combinez des règles, gardez une seule copie de cette ligne en haut.

Rediriger des pages précises​

Pour une page déplacée, la directive Redirect d’Apache, plus simple, suffit :

Redirect 301 /old-page.html https://example.com/new-page/

Pour déplacer un dossier entier en conservant le reste de chaque adresse :

RewriteEngine On
RewriteRule ^blog/(.*)$ https://example.com/news/$1 [R=301,L]

Pour déplacer un site entier vers un nouveau domaine, placez ceci dans le fichier .htaccess de l’ancien domaine :

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ https://example.net/$1 [R=301,L]

Tester vos redirections​

  • Ouvrez l’ancienne adresse dans une fenêtre privée et vérifiez où vous arrivez.

  • Vérifiez le code d’état depuis un terminal. L’option -I n’affiche que les en-têtes de la réponse :

    curl -I http://example.com/old-page.html

    Cherchez 301 ou 302 et une ligne Location: avec la nouvelle adresse.

  • Surveillez les boucles de redirection, quand le navigateur signale trop de redirections. Elles signifient généralement que deux règles renvoient les visiteurs de l’une à l’autre, ou qu’une règle correspond à sa propre destination.

  • Évitez les chaînes, où une redirection mène à une autre. Faites pointer chaque ancienne adresse directement vers sa destination finale.

Cet article vous a-t-il aidé ?