uni-app 中 manifest.json 的 h5 路由配置不生效?

淑萍 ☘︎ 阅读 25

我在 uni-app 项目里想自定义 H5 端的路由路径,改了 manifest.json 里的 h5.router 模式为 history,但刷新页面就 404,本地开发没问题,部署到 Nginx 上就不行了。

我试过在 manifest.json 里这样配:

{
  "h5": {
    "router": {
      "mode": "history",
      "base": "/myapp/"
    }
  }
}

但部署后访问 /myapp/home 刷新就报错,是不是还要配服务器?还是我哪里写错了?

我来解答 赞 5 收藏
二维码
手机扫码查看
2 条解答
UX-柯佳
UX-柯佳 Lv1
这个确实是服务端配置的问题,history模式的路由需要服务端配合。你的manifest.json配置没问题,但nginx那边没做处理。

nginx要加个try_files配置,把找不到的路径都指向index.html。比如这样:

location /myapp/ {
try_files $uri $uri/ /myapp/index.html;
}


记得改完nginx要重启下服务。原理是让nginx把所有路由请求都转到前端入口文件,然后由前端路由来处理。

我之前也踩过这个坑,部署完发现刷新就404,排查半天才发现是nginx没配好。这种问题本地开发不会暴露,因为webpack dev server默认就处理好了history路由。
点赞
2026-03-09 08:11
上官乐萱
这玩意儿是前端路由的经典坑,很多人都踩过。你在 manifest.json 里配了 history 模式,这只是告诉前端用 HTML5 History API 去改 URL,但服务器并不知道这事。

当你刷新页面的时候,浏览器会老老实实向 Nginx 请求 /myapp/home 这个路径,Nginx 上哪找这个物理文件去?肯定 404 啊。本地开发没问题是因为 devServer 帮你做了转发,上线了就得自己配 Nginx。

解决办法很简单,改 Nginx 配置,加个 try_files。因为你 base 写的是 /myapp/,所以 location 也要对应上,或者直接在根 location 里写。

一般这样处理:

location /myapp/ {
alias /你的网站根目录/myapp/; # 或者 root 指令,看你实际部署情况
try_files $uri $uri/ /myapp/index.html;
}


这段代码的意思是:Nginx 先找用户访问的文件,找不到就找目录,再找不到就统统回退到 index.html,把控制权交回给前端路由。

另外提醒一句,manifest.json 里的 base 路径要跟 Nginx 里实际部署的目录结构保持一致,不然静态资源(js、css)也会 404。配完记得 nginx -s reload 一下。
点赞 3
2026-03-04 09:56