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 404http://localhost:4321/en/blog/fonctionne- En build de production (
bun run build),/blog/index.htmlest bien généré
Premières hypothèses
J’ai d’abord suspecté la génération des liens.
- Le
href: "/blog"deHeaderNavest-il cassé ? getLocalePath()se comporte-t-il mal uniquement en japonais ?prefixDefaultLocale: falsefait-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.
- Vérifier la sortie statique
- Le log de
bun run buildcontient/blog/index.html dist/blog/index.htmlexiste réellement
- Le log de
- Vérifier les liens réellement rendus
- Le lien de navigation dans
dist/index.htmlest"/blog/" - Dans
dist/en/index.html, c’est"/en/blog/"
- Le lien de navigation dans
- 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
- Avec
À 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/verscontent/blog/ - Mettre à jour la base du loader dans
src/content.config.tsvers./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 :
- Vérifier que
bun run buildgénère/blog/index.html - Vérifier que le lien de navigation dans
dist/index.htmlpointe vers/blog/ - Vérifier
prefixDefaultLocaleet clarifier l’attendu pour/ja/blog/ - 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
hsb.horse