uni-app h5发布失败主因是manifest.json中base与服务器路径不一致或服务器未配history回退规则;需正确配置router.mode、router.base(如/mobile/)、publicpath(建议./);打包产物在unpackage/dist/build/h5目录;history模式需nginx配置try_files回退,hash模式存在微信兼容和seo问题。

uni-app H5发布失败,90% 是因为 manifest.json 里的 base 和服务器实际路径不一致,或 Nginx/Apache 没配好 history 路由回退规则。
打包前必须改对的三个配置项
别急着点“发行”,先打开项目根目录下的 manifest.json,进“h5 配置”可视化面板或直接切到“源码视图”修改:
-
router.mode:选history(URL 干净)还是hash(兼容老浏览器),二者影响后续服务器配置 -
router.base:必须和你最终部署的子路径完全一致,比如要访问https://example.com/mobile/,这里就得填/mobile/(开头结尾都要有斜杠) -
publicPath:Webpack 的资源引用前缀,默认/会从根目录加载 JS/CSS;若部署在子路径且用history模式,建议显式设为./,避免资源 404
常见错误:把 base 设成 mobile(缺斜杠)或 ./mobile/(base 不接受点号开头)——这会导致路由跳转正常但静态资源全部 404。
打包产物在哪?别去 unpackage/dist/build/web
HBuilderX 3.6+ 版本默认打包路径已变更,控制台输出的才是唯一可信路径。每次发行后,看 HBuilderX 底部“控制台”面板最后一行类似这样的提示:
✅ 发行成功!输出目录:/path/to/your/project/unpackage/dist/build/h5
这个 h5 目录就是你要上传的全部内容(含 index.html、static/、favicon.ico 等)。不要手动进 web 文件夹找,那个是旧版或 CLI 打包路径,HBuilderX GUI 发行不会生成它。
上传时注意:如果你 router.base 设的是 /app/,那就要把整个 h5 文件夹重命名为 app,再丢进服务器网站根目录;如果设的是 /,就直接把 h5 里所有文件解压到网站根目录。
Nginx 配置 history 路由的关键两行
用 history 模式却没配服务器,刷新页面或直接访问二级路由(如 /app/user)必报 404。Nginx 必须加 try_files 回退规则:
location /app/ {
try_files $uri $uri/ /app/index.html;
}
注意三点:
- 路径前缀(
/app/)必须和你的router.base完全一致 - 最后一段
/app/index.html也要带前缀,不能写成/index.html - 别漏掉
$uri/,否则带尾斜杠的路径(如/app/)会 404
如果同时跑多个 uni-app H5 子应用(如 /admin/、/user/),每个都要单独写一个 location 块,不能合并。
hash 模式真能省事?别忽略这个隐藏问题
hash 模式确实不用配服务器回退,router.base 可设为 ./,Nginx 只需静态托管即可。但它有个硬伤:
- 微信内嵌 WebView 对
#后参数有时截断或编码异常,导致路由守卫失效或参数丢失 - SEO 几乎为零,搜索引擎不索引
#后内容 - 分享链接带一长串
#/user?id=123,体验差
所以除非明确要兼容 IE9 或部署环境完全无法改服务器配置,否则优先选 history + 正确 Nginx 配置。真正省事的不是模式本身,而是你是否愿意花 2 分钟把 location 块写对。
最常被忽略的其实是权限和 MIME 类型:确保服务器上 index.html 可读,且 Nginx 的 mime.types 包含 application/wasm(uni-app 编译可能生成 wasm 文件),否则某些机型白屏无报错。











