Le peu de serveur qu'un statique peut avoir

_redirects et _headers

Un site Pages n'exécute aucun programme : pas de redirection calculée, pas d'en-tête décidé à la volée. Or les deux besoins qui reviennent sans cesse n'ont justement rien de dynamique.

Comment ça marche

Tu poses ces deux fichiers texte à la racine de ton dossier de sortie. Ils sont lus au moment de la mise en ligne, une seule fois, et traduits en configuration du serveur. Le site publié n'a donc rien à interpréter à chaque visite — la redirection coûte exactement zéro.

Les lignes que le serveur refuse te sont montrées après le déploiement, dans le tableau de bord comme dans la sortie de la commande. Sans ça, une règle mal écrite est ignorée en silence et on cherche longtemps pourquoi elle ne s'applique pas.

Ce que ce site a déployé

# _redirects
/ancien        /nouveau/  301
/temporaire    /nouveau/  302
/vieux-blog/*  /nouveau/  302

# _headers
/preuve-entetes/*
  X-Demo-Entete: pose-par-le-fichier-_headers
  Cache-Control: public, max-age=60

Essaie toi-même

Redirection permanente
/ancien

Le navigateur la retient et les moteurs de recherche transfèrent l'ancienneté de l'adresse. C'est ce qu'il faut quand une page a définitivement changé d'adresse.

/ancien /nouveau/ 301
Redirection temporaire
/temporaire

Rien n'est mémorisé : le jour où tu retires la règle, l'adresse redevient ce qu'elle était. Pour une page en travaux ou une campagne qui se termine.

/temporaire /nouveau/ 302
Redirection par joker
/vieux-blog/

La suite du chemin est CONSERVÉE : /vieux-blog/mon-article devient /nouveau/mon-article. C'est ce qu'on veut pour déplacer un dossier entier — mais il faut que la page d'arrivée existe, sinon on redirige proprement vers un 404.

/vieux-blog/* /nouveau/ 302

Un piège qui vaut d'être connu

Un lot d'en-têtes posé sur /* s'applique à tout le site — y compris là où le serveur avait déjà mis les siens. Or nginx remplace les en-têtes hérités dès qu'un bloc en déclare un : viser tout le site avec un seul en-tête personnalisé retirerait, sur ces chemins, les trois en-têtes de sécurité posés d'office. D'où le choix ici de ne viser qu'un dossier dédié. Si tu dois couvrir tout le site, redéclare les trois avec les tiens.

Un détail qui décide de tout, avec Next.js

Le serveur cherche le fichier demandé, puis le dossier, puis rend 404. Il n'essaie pas d'ajouter .html tout seul. Un export Next en trailingSlash: false produit preuves.html : l'adresse /preuves ne correspondrait alors à rien. Ce projet est donc en trailingSlash: true, qui produit preuves/index.html — et l'adresse trouve son dossier. C'est la première chose à vérifier en portant un site depuis un autre hébergeur, qui devinait l'extension à ta place.