uniapp 的 router.mode 必须严格配置在 manifest.json 的 h5 节点下,格式为 {"h5": {"router": {"mode": "history"}}},大小写敏感,修改后需重新运行项目而非热更新。

manifest.json 里 router.mode 配置写对了没?
很多情况下,history 模式“不起作用”,其实压根没生效——因为配置位置或格式错了。UniApp 的 router.mode 必须严格写在 manifest.json 的 h5 节点下,不是 mp-weixin,也不是顶层。
常见错误现象:改完配置后刷新页面 URL 还带 #/,或者控制台没报错但路由行为完全没变。
实操建议:
- 打开
manifest.json,确认结构类似这样:{ "name": "my-app", "h5": { "router": { "mode": "history" } } } - 修改后必须重新运行项目:
npm run dev:h5或 HBuilderX 中「运行 → 运行到浏览器」,热更新不触发路由模式重载 - 不要写成
"mode": "History"(大小写敏感),也不要在vue-router初始化代码里手动覆盖——uni-app 的路由由框架接管,手写会冲突
刷新页面直接返回源码?那是服务器没兜底
这是 history 模式最典型的“假失效”:前端跳转正常,但一刷新就看到 HTML 源码(甚至下载弹窗),本质是服务器把 /user/profile 当作真实路径去查文件,找不到就返回 404 或原始 index.html 的 raw 内容(MIME 类型错导致浏览器不执行 JS)。
使用场景:本地用 npm run dev:h5 通常没问题;一旦部署到 Nginx/Apache/静态托管平台,就必须配服务端 fallback。
实操建议:
- Nginx:在
location /块中加一行:try_files $uri $uri/ /index.html; - Apache:根目录放
.htaccess,内容为:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.html [L] - 注意:如果部署在子路径(如
@#@#@#@#@#@#@#@#@#@0),除了 Nginx 的root或alias要配对,manifest.json还得加publicPath:"h5": {"publicPath": "/myapp/", "router": {"mode": "history"}}
为什么有的手机刷新后白屏或跳首页?base 和 publicPath 混了
publicPath 是构建时资源引用的前缀(影响 js/css 加载),router.base 是运行时路由匹配的基准路径(影响 push/go 行为)。两者不一致,会导致路由能推、但组件不渲染,或资源 404 进而 JS 报错中断。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
常见错误现象:PC 正常,iOS 微信里点链接进 /pages/user/index 却卡在 splash 页;或者控制台报 Failed to load resource: the server responded with a status of 404 (),路径指向 /static/xxx.js 而不是 /sub/static/xxx.js。
实操建议:
- 若部署在子目录,只设
publicPath,别碰router.base(uni-app 会自动从publicPath推导) -
publicPath值必须以/开头、结尾不加/,例如:"/mall"✅,"mall/"❌,"./mall"❌ - 构建后检查
dist/build/h5/index.html里script标签的 src 是否带正确前缀,这是最直接的验证方式
旧版本 uni-app 有兼容性坑,别跳过升级
部分 3.1.x 之前的版本存在 history 模式下 replace 失效、嵌套路由丢失参数、或 iOS WKWebView 中 popstate 未触发等问题。这些不是配置问题,而是底层实现缺陷。
性能 / 兼容性影响:新版(≥3.2.13)已统一基于 createWebHistory 封装,支持更稳定的导航守卫和滚动行为;旧版可能在微信内嵌浏览器中静默降级回 hash。
实操建议:
- 运行
npm list @dcloudio/uni-app查当前版本 - 升级命令:
npm update @dcloudio/uni-app(注意不是uni-app,包名带 scope) - 升级后务必清空
node_modules和dist,再全量重编译,缓存容易掩盖问题
history 模式本身不难,难的是它把前端路由的边界推到了服务端配置和构建路径上——三个地方(manifest、服务器、publicPath)只要一个没对齐,就会在某个设备或某个刷新时机突然崩掉。










