不能直接混合托管vue和gin,必须路径隔离:需配置staticfs服务静态资源、get("/*filepath")兜底返回index.html,并确保vue的base与gin路由前缀严格对齐,否则导致路由冲突、404及spa刷新失败。

不能直接把 Vue 打包产物和 Gin 同端口同服务“混合托管”而不做路径隔离——否则会出现路由冲突、静态资源 404、SPA 刷新 404 等问题。
为什么 engine.Static() 直接挂载 dist 不够用
很多人试过在 Gin 中用 engine.Static("/assets", "./dist/assets") 和 engine.LoadHTMLFiles("./dist/index.html"),但很快发现:
- 访问
/能加载首页,但刷新/user/list就 404(前端路由未被 Gin 拦截) -
/api/xxx和/user/list都走 Gin,但 Gin 默认不识别 Vue Router 的 history 模式路径 -
index.html里引用的/assets/xxx.js可能因 base 路径不对而 404 - 没做 fallback,所有非 API、非静态资源路径都该返回
index.html,否则 SPA 路由失效
必须配置 StaticFS + GET("/*filepath") fallback
核心是让 Gin 在找不到匹配路由时,优先尝试返回 index.html,同时正确服务静态资源。关键三步:

