diff --git a/server/router/frontend/frontend.go b/server/router/frontend/frontend.go index df333bcb..b67e0bcc 100644 --- a/server/router/frontend/frontend.go +++ b/server/router/frontend/frontend.go @@ -30,26 +30,28 @@ func NewFrontendService(profile *profile.Profile, store *store.Store) *FrontendS } func (*FrontendService) Serve(_ context.Context, e *echo.Echo) { - skipper := func(c echo.Context) bool { + apiSkipper := func(c echo.Context) bool { return util.HasPrefixes(c.Path(), "/api", "/memos.api.v1") } - // Route to serve the assets folder without HTML5 fallback. - e.Group("/assets").Use(func(next echo.HandlerFunc) echo.HandlerFunc { + // Route to serve the main app with HTML5 fallback for SPA behavior. + e.Use(func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { + // Skip API routes. + if apiSkipper(c) { + return next(c) + } + // Skip `/index.html`. + if c.Path() == "/index.html" { + return next(c) + } c.Response().Header().Set(echo.HeaderCacheControl, "max-age=31536000, immutable") return next(c) } }, middleware.StaticWithConfig(middleware.StaticConfig{ - Filesystem: getFileSystem("dist/assets"), - HTML5: false, // Disable fallback to index.html - })) - - // Route to serve the main app with HTML5 fallback for SPA behavior. - e.Use(middleware.StaticWithConfig(middleware.StaticConfig{ Filesystem: getFileSystem("dist"), HTML5: true, // Enable fallback to index.html - Skipper: skipper, + Skipper: apiSkipper, })) }