Während bun dev lief, lieferte /blog/ einen 404, während /en/blog/ korrekt angezeigt wurde.
Am Ende war die Ursache keine Routing-Konfiguration, sondern eine Verzeichnis-Kollision.
Symptom
http://localhost:4321/blog/gibt 404 zurückhttp://localhost:4321/en/blog/funktioniert- Im Produktions-Build (
bun run build) wird/blog/index.htmlerzeugt
Erste Verdachtsmomente
Zuerst habe ich die Link-Generierung geprüft.
- Ist
href: "/blog"inHeaderNavkaputt? - Verhält sich
getLocalePath()nur für Japanisch falsch? - Verschwindet
/blogdurchprefixDefaultLocale: false?
Ergebnis: nichts davon war das Problem.
Verifikationsprozess
Ich habe die Fakten in dieser Reihenfolge gesammelt.
- Statische Ausgabe prüfen
- Im Log von
bun run builderscheint/blog/index.html dist/blog/index.htmlexistiert tatsächlich
- Im Log von
- Tatsächlich gerenderte Links prüfen
- Der Nav-Link in
dist/index.htmlist"/blog/" - In
dist/en/index.htmlist er"/en/blog/"
- Der Nav-Link in
- i18n-Spezifikation prüfen
- Mit
prefixDefaultLocale: falseist die korrekte URL für Japanisch/blog/ - Dass
/ja/blog/404 ist, ist erwartetes Verhalten
- Mit
Damit war klar: Routen-Definition und Links sind korrekt.
Root Cause
Im Projekt-Root lag ein Verzeichnis blog/ für den Content.
Gleichzeitig wurde als Seitenroute src/pages/blog/index.astro verwendet.
Damit kollidierten reales Verzeichnis blog/ und URL-Segment /blog.
Unter bun dev führte diese Kollision zum 404.
Fix
- Content-Ablage von
blog/nachcontent/blog/verschoben - Loader-Base in
src/content.config.tsauf./content/bloggeändert
Danach wurde /blog/ auch unter bun dev korrekt ausgeliefert.
Checkliste für denselben Fehler
Wenn der Fehler erneut auftritt, ist diese Reihenfolge schnell:
- Prüfen, ob
bun run build/blog/index.htmlerzeugt - Prüfen, ob der Nav-Link in
dist/index.htmlauf/blog/zeigt prefixDefaultLocaleprüfen und die Erwartung für/ja/blog/klären- Prüfen, ob im Projekt-Root ein Verzeichnis mit demselben Namen wie das URL-Segment liegt
Erkenntnisse
- URL-Segmente in Astro möglichst nicht mit Verzeichnisnamen im Projekt-Root überlappen lassen
- Wenn Build funktioniert, aber Dev fehlschlägt, zuerst unterschiedliche Auslieferungspfade prüfen
- Für 404-Analysen Links, Routen-Generierung und reale Dateien getrennt validieren
hsb.horse