_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=60Essaie toi-même
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.
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.
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.
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.