logo hsb.horse
← Zur Blog-Übersicht

Blog

Ursache und Lösungsweg für ein /blog-404 unter Astro + bun dev

So lässt sich ein /blog-404 unter Astro + bun dev in der Reihenfolge Link-Prüfung, Routen-Generierung und Auslieferungspfad sauber eingrenzen. Enthält den Fix für die Verzeichnis-Kollision.

Veröffentlicht: Aktualisiert:

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ück
  • http://localhost:4321/en/blog/ funktioniert
  • Im Produktions-Build (bun run build) wird /blog/index.html erzeugt

Erste Verdachtsmomente

Zuerst habe ich die Link-Generierung geprüft.

  • Ist href: "/blog" in HeaderNav kaputt?
  • Verhält sich getLocalePath() nur für Japanisch falsch?
  • Verschwindet /blog durch prefixDefaultLocale: false?

Ergebnis: nichts davon war das Problem.

Verifikationsprozess

Ich habe die Fakten in dieser Reihenfolge gesammelt.

  1. Statische Ausgabe prüfen
    • Im Log von bun run build erscheint /blog/index.html
    • dist/blog/index.html existiert tatsächlich
  2. Tatsächlich gerenderte Links prüfen
    • Der Nav-Link in dist/index.html ist "/blog/"
    • In dist/en/index.html ist er "/en/blog/"
  3. i18n-Spezifikation prüfen
    • Mit prefixDefaultLocale: false ist die korrekte URL für Japanisch /blog/
    • Dass /ja/blog/ 404 ist, ist erwartetes Verhalten

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/ nach content/blog/ verschoben
  • Loader-Base in src/content.config.ts auf ./content/blog geändert

Danach wurde /blog/ auch unter bun dev korrekt ausgeliefert.

Checkliste für denselben Fehler

Wenn der Fehler erneut auftritt, ist diese Reihenfolge schnell:

  1. Prüfen, ob bun run build /blog/index.html erzeugt
  2. Prüfen, ob der Nav-Link in dist/index.html auf /blog/ zeigt
  3. prefixDefaultLocale prüfen und die Erwartung für /ja/blog/ klären
  4. 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