Comment c’est calculé
Une redirection est une réponse du serveur avec un code d’état 3xx et un en-tête Location. Le navigateur, ou un moteur de recherche, demande alors la nouvelle adresse à la place. Le générateur écrit la redirection le plus tôt possible : dans Nginx, un bloc server qui ne fait rien d’autre ; dans Apache, des règles de réécriture en haut du .htaccess.
# Apache, .htaccess
RewriteRule ^old-page\.html$ /new-page [R=301,L]
# Nginx
location = /old-page.html {
return 301 /new-page;
} Apache compare avec une expression régulière : les points et autres caractères spéciaux d’un chemin sont donc échappés, et la barre oblique initiale est omise parce que .htaccess la retire. Nginx compare une location exacte comme du texte brut. Les deux conservent la chaîne de requête du visiteur, sauf si l’ancienne adresse en avait une. Les règles HTTPS et www mènent à l’adresse finale en une seule étape, plutôt que par deux redirections à la suite.
Exemple
Vous déplacez example.com vers www.example.com : les requêtes vers http://example.com/blog, http://www.example.com/blog et https://example.com/blog reçoivent toutes une seule 301 vers https://www.example.com/blog. Seul https://www.example.com est servi normalement.
Quel code d’état utiliser
| Code | Signification | À utiliser pour |
|---|---|---|
| 301 | Déplacé définitivementUne page ou un site déplacé pour de bon. Les moteurs de recherche transmettent le classement de l’ancienne adresse à la nouvelle. | Une page ou un site déplacé pour de bon. Les moteurs de recherche transmettent le classement de l’ancienne adresse à la nouvelle. |
| 302 | Trouvé, temporairement ailleursUn détour court, comme une page de soldes ou une maintenance. L’ancienne adresse reste dans les résultats de recherche. | Un détour court, comme une page de soldes ou une maintenance. L’ancienne adresse reste dans les résultats de recherche. |
| 307 | Temporaire, même méthodeComme 302, mais un formulaire envoyé en POST est renvoyé en POST. | Comme 302, mais un formulaire envoyé en POST est renvoyé en POST. |
| 308 | Permanent, même méthodeComme 301, mais conserve POST. Utile pour une API ou un point de terminaison de formulaire qui a déménagé. | Comme 301, mais conserve POST. Utile pour une API ou un point de terminaison de formulaire qui a déménagé. |
Questions
Quelle est la différence entre une redirection 301 et 302 ?
Une 301 dit que l’adresse a déménagé pour de bon : les navigateurs la retiennent et les moteurs de recherche remplacent l’ancienne adresse par la nouvelle. Une 302 dit que le déplacement est temporaire, donc l’ancienne adresse garde sa place. Utilisez 301 pour un nouveau domaine, HTTPS ou une page renommée ; Google traite de toute façon une 302 gardée longtemps comme une 301.
Faut-il rediriger www vers sans www ou l’inverse ?
Les deux fonctionnent pour les moteurs de recherche, tant que vous en choisissez un et redirigez l’autre vers lui. La forme courte est plus facile à saisir ; www facilite la définition de cookies propres au site et le pointage du nom vers un CDN avec un enregistrement CNAME.
Pourquoi ma redirection boucle-t-elle ?
Généralement parce que HTTPS se termine sur un proxy ou un CDN et que le serveur voit chaque requête comme http://, donc il redirige même celles en https://. Cochez l’option proxy pour tester plutôt l’en-tête X-Forwarded-Proto. Dans Cloudflare, le mode SSL Full (strict) évite le problème. Videz le cache du navigateur après la correction : les navigateurs retiennent les redirections 301.
Nginx lit-il les fichiers .htaccess ?
Non. Nginx n’a pas de fichiers de configuration par dossier : les règles d’un fichier .htaccess doivent être écrites dans la configuration du serveur, comme dans l’onglet Nginx ici, puis Nginx doit être rechargé. Cela demande un accès au serveur, ce que donne un VPS et que l’hébergement mutualisé n’offre généralement pas.