Déploiement
Déploiement • Chapitre 4 : Déploiement d'une application frontend

Gestion des routes et des erreurs 404

Le piège numéro un des Single Page Applications (React, Vue, Angular) : apprenez pourquoi rafraîchir une URL profonde provoque une erreur 404 du serveur et comment configurer la règle universelle de réécriture (SPA Fallback) sur tous les hébergeurs.

🛑
L'Illusion du Clic

La navigation par liens fonctionne en local grâce à l'API history.pushState sans faire de requête HTTP au serveur.

⚡
Le Crash au F5

Au rafraîchissement, le serveur cherche un dossier physique correspondant à l'URL. Ne le trouvant pas, il renvoie un statut 404.

↩️
Réécriture SPA

Renvoyer systématiquement index.html avec le code 200 pour toute route inconnue sur le disque.

🎯
Route Wildcard

La véritable page 404 de l'application est désormais gérée côté client par le routeur frontend (ex: path: '**').

spa-rewrites-configs.sh
# --- 1. NETLIFY (Fichier public/_redirects ou dist/_redirects) ---
/*    /index.html   200

# --- 2. VERCEL (Fichier vercel.json à la racine du projet) ---
{
  "rewrites": [
    { "source": "/(.*)", "destination": "/index.html" }
  ]
}

# --- 3. NGINX (Dans le bloc server { ... }) ---
location / {
    try_files $uri $uri/ /index.html;
}

# --- 4. APACHE (Fichier .htaccess dans le dossier racine) ---
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

Comprendre la Mécanique Interne du Routage Client

1. L'Analogie du Livre à Chapitres

Imaginez une Single Page Application comme un livre unique :

  • Navigation normale : Vous ouvrez le livre à la page de couverture (/index.html). Quand vous cliquez sur "Contact", un petit robot JavaScript dans vos mains tourne la page pour vous et met une étiquette /contact sur votre front. Le serveur n'a jamais été contacté.
  • Le rafraîchissement (F5) : Vous refermez le livre, allez voir le bibliothécaire (le serveur web) et lui demandez : "Donnez-moi le document situé dans l'armoire /contact !". Le serveur ouvre son armoire : il n'y a pas de fichier contact.html sur le disque dur. Le bibliothécaire vous répond donc : 404 - Document introuvable !

2. Le Rôle du Fallback avec Statut 200

La règle de réécriture ordonne au serveur :

1. Si la requête demande un fichier existant (ex: /assets/logo.png, /styles.css) -> Sert le fichier directement.
2. Pour TOUTE autre URL -> Réponds avec /index.html en renvoyant le code de statut HTTP 200 (Succès).

Le navigateur reçoit index.html, charge les bundles JavaScript React/Vue/Angular, et le routeur inspecte window.location.pathname : voyant /contact, il affiche le bon composant en une fraction de seconde !

3. Comment gérer les vraies pages d'erreur introuvables ?

Si un internaute tape une adresse qui n'existe vraiment pas dans votre application (ex: /page-inexistante-xyz), le serveur renvoie toujours index.html. C'est donc à votre routeur frontend d'intercepter ces cas via une route wildcard :

React Router v6
<Route 
  path="*" 
  element={<NotFound />} 
/>
Vue Router 4
{
  path: '/:pathMatch(.*)*',
  component: NotFound
}
Angular Router
{
  path: '**',
  component: NotFoundComponent
}

Comparatif : Méthodes de Réécriture par Hébergeur

Serveur / HébergeurFichier de ConfigurationEmplacement dans le Projet
Netlify_redirects ou netlify.tomlDossier de publication (public/ ou dist/)
Vercelvercel.jsonRacine du dépôt Git
Nginx (VPS / Dédié)/etc/nginx/sites-available/defaultConfiguration système serveur (directive try_files)
Apache / Hébergement Mutualisé.htaccessDossier racine public_html
Firebase Hostingfirebase.jsonRacine du projet Firebase (section rewrites)