> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.hodi.host/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Comment configurer des redirections et des en-têtes HTTP personnalisés avec Hodifly ?

Hodifly prend en charge les fichiers **`_redirects`** et **`_headers`** un peu comme sur Netlify pour les **sites statiques**. Placez-les à la **racine de votre sortie publiée** (le dossier de build configuré sur Hodifly).

||| Ces fichiers s'appliquent aux **déploiements statiques**. Les applications Node et Python gèrent leur propre routage et leurs en-têtes dans le code.

### _redirects

Une règle par ligne : `source  destination  [statut]`. Les lignes vides et les commentaires `#` sont ignorés. Si vous omettez le statut, `301` est utilisé.

```
# redirection permanente
/old-page              /new-page              301

# redirection temporaire
/promo                 /summer-sale           302

# redirection vers un site externe (les URL complètes sont conservées telles quelles)
/discord               https://discord.gg/xyz 302

# joker : :splat correspond à tout ce qui a été capturé par le * final
/blog/*                /news/:splat           301

# repli SPA : servir index.html pour tout chemin inconnu (statut 200 = réécriture, URL inchangée)
/*                     /index.html            200
```

###### Bon à savoir :

* **Les vrais fichiers et dossiers l'emportent d'abord.** Un fichier ou un répertoire existant est toujours servi avant toute règle de redirection : vos ressources continuent de fonctionner, et un repli SPA `/* → /index.html 200` ne s'active que pour les chemins qui n'existent pas sur le disque.
* **Le statut `200`** signifie *réécriture* (servir la destination sans changer l'URL) : c'est ce qui fait fonctionner les replis d'application monopage.
* **`:splat`** est le seul motif pris en charge ; il capture tout ce qui correspond à un `*` final.
* **Les chaînes de requête sont conservées** lors des redirections et réécritures.

Non pris en charge (tenez-vous-en au sous-ensemble ci-dessus) : les motifs nommés comme `/:year/:month`, les règles conditionnelles (pays, langue, cookie, rôle) et les indicateurs de forçage (*force flags*).

### Applications monopage : rien à faire

Une application React, Vue, Angular ou Svelte avec un routeur côté client a besoin que tout chemin inconnu soit servi par `index.html`, sinon un rafraîchissement ou un lien direct vers `/une/route` affiche une 404. Hodifly ajoute ce repli **automatiquement** quand la seule page de votre build est un `index.html` qui démarre une application JavaScript : la ligne `/* /index.html 200` ci-dessus n'est plus nécessaire.
* Un fichier absent dans un vrai dossier (`/assets/app.js`) reste une 404, et un projet monté dans un sous-dossier (`/api/`) continue de répondre à ses propres URL.
* Le repli automatique s'efface dès que vous gérez le routage vous-même : un fichier `_redirects`, un `vercel.json`, ou une `RewriteRule` dans un `.htaccess` que vous livrez.
* Pour le désactiver, mettez `"spa": false` dans votre `hodifly.json`. `"spa": true` le force sur un build qui ne ressemble pas à une application monopage.

### _headers

Une ligne de chemin commençant par `/`, suivie de lignes d'en-tête `Nom : valeur` indentées. Les commentaires `#` sont ignorés.

```
# appliquer à chaque réponse
/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin

# appliquer uniquement sous un chemin précis
/assets/*
  Cache-Control: public, max-age=31536000, immutable
```

###### Bon à savoir :

* `/*` ou `/` applique les en-têtes à **l'ensemble du site**.
* Un chemin précis comme `/assets/*` les applique aux requêtes **sous ce chemin**.