logo hsb.horse
← Retour au blog

Blog

Cause et résolution d’un 404 sur /blog avec Astro + bun dev

Comment isoler un 404 sur /blog avec Astro + bun dev en vérifiant les liens, la génération des routes puis le chemin de livraison. Inclut le correctif de collision de répertoire.

Publié: Mis à jour:

Pendant l’exécution de bun dev, /blog/ renvoyait 404 alors que /en/blog/ s’affichait correctement.
Au final, la cause était une collision de répertoire, pas la configuration de routing.

Symptôme

  • http://localhost:4321/blog/ retourne 404
  • http://localhost:4321/en/blog/ fonctionne
  • En build de production (bun run build), /blog/index.html est bien généré

Premières hypothèses

J’ai d’abord suspecté la génération des liens.

  • Le href: "/blog" de HeaderNav est-il cassé ?
  • getLocalePath() se comporte-t-il mal uniquement en japonais ?
  • prefixDefaultLocale: false fait-il disparaître /blog ?

Conclusion : aucun de ces points n’était en cause.

Processus de vérification

J’ai accumulé les faits dans cet ordre.

  1. Vérifier la sortie statique
    • Le log de bun run build contient /blog/index.html
    • dist/blog/index.html existe réellement
  2. Vérifier les liens réellement rendus
    • Le lien de navigation dans dist/index.html est "/blog/"
    • Dans dist/en/index.html, c’est "/en/blog/"
  3. Vérifier la règle i18n
    • Avec prefixDefaultLocale: false, l’URL correcte pour le japonais est /blog/
    • Le 404 sur /ja/blog/ est donc conforme à la spécification

À ce stade, il était clair que la définition des routes et les liens étaient corrects.

Cause racine

À la racine du projet, il existait un répertoire blog/ pour les contenus.
En parallèle, la route de page utilisait src/pages/blog/index.astro.

Autrement dit, le répertoire réel blog/ entrait en collision avec le segment d’URL /blog.
Sous bun dev, cette collision provoquait le 404.

Correctif

  • Déplacer la source de contenu de blog/ vers content/blog/
  • Mettre à jour la base du loader dans src/content.config.ts vers ./content/blog

Après cela, /blog/ est correctement servi aussi avec bun dev.

Ordre de vérification réutilisable

Si le même symptôme réapparaît, ce flux est efficace :

  1. Vérifier que bun run build génère /blog/index.html
  2. Vérifier que le lien de navigation dans dist/index.html pointe vers /blog/
  3. Vérifier prefixDefaultLocale et clarifier l’attendu pour /ja/blog/
  4. Vérifier qu’aucun répertoire à la racine n’a le même nom que le segment d’URL

Retours d’expérience

  • Éviter de réutiliser le même nom entre segment d’URL Astro et répertoire à la racine du projet
  • Quand le build passe mais que dev échoue, suspecter d’abord une différence de chemin de livraison
  • Pour analyser un 404, valider séparément les liens, la génération des routes et les fichiers réels

Liens associés