
Svelte Kit 在生产模式下刷新动态路由(如 /quote/1)报 “Page Not Found” 错误,根本原因是该路由被错误地设为预渲染(prerender=true),而动态参数无法在构建时全部枚举,导致缺失对应 HTML 文件。
svelte kit 在生产模式下刷新动态路由(如 `/quote/1`)报 “page not found” 错误,根本原因是该路由被错误地设为预渲染(prerender=true),而动态参数无法在构建时全部枚举,导致缺失对应 html 文件。
当使用 Svelte Kit 构建生产版本(npm run build)时,若某条动态路由(如 src/routes/quote/[slug]/+page.js)中声明了 export const prerender = true;,Kit 会在构建阶段尝试静态生成所有可能的 [slug] 对应页面。但由于 slug 是运行时动态值(例如 /quote/1、/quote/abc),构建时无法穷举——除非你显式提供 entries 列表(见后文),否则该路由将完全不生成任何 HTML 文件。用户访问 /quote/1 时看似正常(由客户端 Router 拦截并渲染),但一旦刷新页面,请求直接打到服务器,而服务器在 build/ 目录下找不到 quote/1/index.html,便返回 404 或 500(取决于服务端配置)。
✅ 正确做法是:对无法预知参数值的动态路由,禁用预渲染。
打开 src/routes/quote/[slug]/+page.js,将:
export const prerender = true;
修改为:
export const prerender = false;
⚠️ 注意:prerender: false 并不意味着页面不可用——它仅表示该页面不在构建时生成静态 HTML,而是交由客户端 Router 在浏览器中动态渲染(即 SPA 模式)。只要你的适配器(如 @sveltejs/adapter-auto)正确配置了 fallback: 'index.html'(当前配置已满足),且 Web 服务器(如 Nginx、Apache 或 Vercel)启用 History API Fallback,刷新即可正常工作。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
? 补充说明:
- 若你确实需要预渲染部分动态页面(例如已知的固定 ID),可改用 entries 显式声明,例如:
export const prerender = true; export const entries = () => [ { slug: '1' }, { slug: '2' }, { slug: 'featured' } ]; - 当前 svelte.config.js 中存在重复 adapter 配置(两次 adapter: adapter()),请删除其中一行,保留如下简洁写法:
adapter: adapter({ fallback: 'index.html' // ✅ 已正确设置,确保服务器回退到 index.html }) - 构建后务必使用 npm run preview 本地验证,它会启动一个模拟生产环境的 HTTP 服务,能真实复现刷新行为。
总结:动态路由 ≠ 静态页面。prerender = true 适用于内容确定、ID 可枚举的场景;对于真正动态的资源(如数据库驱动的详情页),应设为 false,并依赖客户端渲染与服务端 fallback 机制协同工作。


















