Die Seiten verlinkten /css/app.css, das es seit dem React-Umbau nicht mehr gibt. Jetzt liegen sie unter frontend/static/docs, Vite baut sie mit und schreibt den Link auf das gehashte app.css um; serveDoc liefert sie unter den bisherigen Adressen /static/docs/… aus web/ aus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
46 lines
1.6 KiB
Go
46 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
// webDir enthält das gebaute React-Frontend (frontend/ -> npm run build):
|
|
// index.html plus gehashte Dateien unter assets/.
|
|
const webDir = "web"
|
|
|
|
// serveApp liefert die index.html des Frontends; das Routing übernimmt der
|
|
// Client. Nur für die Seitenrouten des Frontends registriert (siehe routes) --
|
|
// beliebige andere Pfade bleiben ein echtes 404, statt als Seite zu gelten und
|
|
// in der Impression-Statistik zu landen. no-cache, damit nach einem Deploy
|
|
// sofort die neue index.html mit den neuen Asset-Namen geladen wird.
|
|
func serveApp(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Cache-Control", "no-cache")
|
|
http.ServeFile(w, r, webDir+"/index.html")
|
|
}
|
|
|
|
// serveDoc liefert einen Rechtstext. Sie werden mit dem Frontend gebaut
|
|
// (frontend/static/docs), damit sie dasselbe app.css bekommen.
|
|
func serveDoc(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Cache-Control", "no-cache")
|
|
http.ServeFile(w, r, webDir+"/static/docs/"+path.Base(chi.URLParam(r, "page")))
|
|
}
|
|
|
|
// serveAssets liefert die gebauten JS/CSS-Dateien. Ihre Namen enthalten einen
|
|
// Inhalts-Hash, sie ändern sich also nie -> dauerhaft cachebar. Verzeichnisse
|
|
// gibt es nicht zu sehen (kein Listing).
|
|
func serveAssets() http.Handler {
|
|
files := http.FileServer(http.Dir(webDir))
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if strings.HasSuffix(r.URL.Path, "/") {
|
|
http.NotFound(w, r)
|
|
return
|
|
}
|
|
w.Header().Set("Cache-Control", "public, max-age=31536000, immutable")
|
|
files.ServeHTTP(w, r)
|
|
})
|
|
}
|