Redirections et réécritures d'URL
Forcer le HTTPS, choisir entre www et sans www, déplacer une page sans perdre son référencement, et le piège de la boucle infinie.
301 ou 302 ?
Une 301 est permanente : les moteurs transfèrent l'ancienneté de l'ancienne adresse vers la nouvelle, et les navigateurs la retiennent. Une 302 est temporaire : rien n'est transféré, rien n'est mémorisé. Pour un déplacement définitif, c'est 301 — sinon vous repartez de zéro en référencement.
Une 301 se grave
Les navigateurs mettent les redirections permanentes en cache, parfois très longtemps. Une 301 posée par erreur poursuit vos visiteurs bien après sa suppression. En cas de doute pendant une migration, commencez par une 302 et passez en 301 une fois sûr.
Forcer le HTTPS
server {
listen 80;
server_name monsite.fr www.monsite.fr;
return 301 https://$host$request_uri;
}$host conserve le domaine demandé, ce qui évite une seconde redirection quand le visiteur arrive par www.
Choisir www ou sans www
Peu importe lequel, mais choisissez-en un : servir le même contenu sur les deux crée du contenu dupliqué, et divise votre référencement entre deux adresses.
Vers la version sans www
server {
listen 443 ssl;
server_name www.monsite.fr;
return 301 https://monsite.fr$request_uri;
}Déplacer une page
location = /ancienne-page {
return 301 /nouvelle-page;
}
# Toute une section
location /blog/ {
rewrite ^/blog/(.*)$ /articles/$1 permanent;
}location = , le signe égal
Sans lui, /ancienne-page attrape aussi /ancienne-page-bis et tout ce qui commence pareil. Le signe égal impose une correspondance exacte — c'est presque toujours ce qu'on veut pour une page unique.
La boucle infinie
Le navigateur annonce « trop de redirections ». Trois causes, toujours les mêmes : une redirection vers HTTPS placée dans le bloc HTTPS lui-même ; une redirection www vers sans-www dans un vhost qui répond aux deux ; ou une application qui redirige aussi de son côté parce qu'elle croit être en HTTP.
Suivre la chaîne pour voir où ça tourne
curl -sIL https://monsite.fr | grep -E '^HTTP|^[Ll]ocation'Le troisième cas se règle en transmettant le bon en-tête : sans proxy_set_header X-Forwarded-Proto $scheme, votre application voit du HTTP et redirige vers HTTPS, que nginx renvoie vers elle, indéfiniment.
Bloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.
Ouvrir un ticket