更新记录
1.1.0(2026-10-16) 下载此版本
- 增加全局和单路由模糊公开路径配置。
- 支持大小写、连字符、下划线和驼峰形式的公开路径识别。
- 模糊地址命中后自动规范化为唯一公开地址。
- 修正 H5
vue-routerhistory 包装和 HBuilderX 项目根目录解析。
平台兼容性
uni-app(3.8.6)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | √ | √ | √ | - | √ | √ | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
uni-app H5 路由别名与 URL 美化
aw-pretty-route 是一款适用于 uni-app Vue 3 + Vite 的 H5 路由别名与 URL 美化插件。它可以把 pages.json 中的真实页面路径转换为简洁、稳定、适合分享和 SEO 的公开 URL,同时支持动态路径参数、query 参数映射,以及大小写、蛇形和驼峰路径兼容。
业务代码继续使用 uni-app 注册的真实路径,H5 地址栏自动显示公开路径;App 和小程序保持原生页面路径,不需要修改业务跳转代码。
适用场景
| 场景 | 示例 |
|---|---|
去除 /pages 前缀 |
/pages/about/index -> /about/index |
| 配置路由别名 | /pages/product/site -> /product |
| 动态路径参数 | /pages/article/detail?id=123 -> /article/123 |
| 兼容历史链接 | /ProductCenter、/product_center、/PRODUCT-CENTER -> /product-center |
| 生成 SEO 和分享链接 | 将真实页面 URL 转换为公开 URL |
能力总览
| 能力 | 说明 |
|---|---|
| 页面发现 | 自动读取 pages.json,支持主包和分包 |
| 静态公开路径 | 使用页面项的 routeAlias |
| 默认公开路径 | 自动去除 /pages 前缀 |
| 动态公开路径 | 支持 /article/:id(\\d+) 等模板 |
| 参数转换 | 支持 query.id 转换为路径参数 |
| 模糊路径 | 支持大小写、连字符、下划线和驼峰形式 |
| H5 history | 包装 location、push、replace、listen 和 createHref |
| 非 H5 平台 | 不修改 App 和小程序原生路由 |
| 规范化 | 模糊地址命中后统一回到唯一公开地址 |
接入方式
1. 注册 Vite 插件
// vite.config.js
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import { createAwPrettyRoutePlugin } from './uni_modules/aw-pretty-route/js_sdk/vite.js'
export default defineConfig({
plugins: [createAwPrettyRoutePlugin(), uni()]
})
只需要配置一次,不需要在 main.js 安装运行时插件。
2. 页面正常注册
{
"path": "pages/product/site",
"routeAlias": "/product"
}
3. 业务继续使用真实路径
uni.navigateTo({
url: '/pages/article/detail?id=123'
})
真实路径和公开路径
插件同时维护两种路径:
| 名称 | 示例 | 用途 |
|---|---|---|
真实路径 real |
/pages/article/detail |
uni-app 页面注册路径,业务跳转使用 |
公开路径 public |
/article/:id |
浏览器地址栏、分享链接和 SEO 使用 |
public 不是文件路径,也不是 pages.json 中的页面路径。它只是希望用户在 H5 地址栏看到的 URL 模板。
例如:
业务跳转:/pages/article/detail?id=123
H5 地址栏:/article/123
业务代码仍然传真实路径:
uni.navigateTo({
url: '/pages/article/detail?id=123'
})
路径行为
| 场景 | 输入 | H5 地址栏 |
|---|---|---|
| 普通跳转 | /pages/product/site |
/product |
| 首页 | /pages/index/index |
/ |
| 动态页面 | /pages/article/detail?id=123 |
/article/123 |
| 模糊地址 | /Product |
/product |
| App/小程序 | /pages/product/site |
保持 /pages/product/site |
全局配置
在项目根目录创建 aw-pretty-route.config.js:
export default {
home: '/pages/index/index',
fuzzy: true,
routes: [
{
// 必须是 pages.json 中已经注册的页面路径。
real: '/pages/article/detail',
// H5 地址栏显示的公开 URL,:id 是路径参数。
public: '/article/:id(\\d+)',
// 从真实页面 query 中读取路径参数。
params: { id: 'query.id' }
}
]
}
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
home |
string |
/pages/index/index |
首页真实路径 |
fuzzy |
boolean |
false |
是否全局开启模糊路径 |
routes |
array |
[] |
真实路径到公开路径的映射规则 |
单路由配置
在 pages.json 中配置静态页面
{
"path": "pages/private/index",
"routeAlias": "/private",
"routeFuzzy": false
}
| 字段 | 类型 | 说明 |
|---|---|---|
routeAlias |
string |
页面规范公开路径 |
routeFuzzy |
boolean |
覆盖全局模糊设置 |
在动态规则中配置
{
// pages.json 中注册的真实页面路径。
real: '/pages/article/detail',
// H5 地址栏使用的公开 URL 模板。
public: '/article/:id',
// :id 从 query.id 中取值。
params: { id: 'query.id' },
fuzzy: false
}
| 字段 | 类型 | 说明 |
|---|---|---|
real |
string |
pages.json 中已注册的真实路径 |
public |
string |
公开路径,可包含 :param,例如 /article/:id |
params |
object |
公开路径参数到真实 query 参数的映射 |
fuzzy |
boolean |
覆盖全局模糊设置 |
模糊路径规则
开启 fuzzy 后,以下写法可以指向 /product-center:
/product-center
/ProductCenter
/product_center
/PRODUCT-CENTER
命中后地址栏统一为 /product。模糊路径只用于兼容识别,不会产生多个正式公开 URL。
如果多个启用模糊匹配的路由归一化后冲突,构建阶段会报错。
URL API
只在分享、复制链接、SEO canonical 或普通 <a> 链接等场景使用:
import { getPublicUrl } from './uni_modules/aw-pretty-route/js_sdk/index.js'
const url = getPublicUrl('/pages/article/detail?id=123')
| API | 用途 |
|---|---|
getPublicUrl(url) |
真实 URL 转公开 URL |
getRealUrl(url) |
公开 URL 转真实 URL |
getCanonicalUrl(url) |
模糊 URL 转唯一规范公开 URL |
日常 navigateTo、redirectTo、reLaunch 和 switchTab 不需要调用这些 API。
params 参数映射
params 的左侧是公开路径中的参数名,右侧是 uni-app 真实页面 URL 中的 query 参数来源。
{
real: '/pages/article/detail',
public: '/article/:id',
params: {
id: 'query.id'
}
}
转换关系如下:
真实页面 URL:/pages/article/detail?id=123&tab=comments
公开页面 URL:/article/123?tab=comments
其中:
| 配置 | 含义 |
|---|---|
:id |
公开 URL 中的路径参数,值为 123 |
query.id |
从真实 URL 的 id query 参数读取值 |
tab=comments |
没有被映射为路径参数,因此继续保留 |
平台和部署
| 平台 | 行为 |
|---|---|
| H5 | 使用公开路径和 history 路由 |
| App | 使用真实 uni-app 页面路径 |
| 小程序 | 使用真实 uni-app 页面路径 |
H5 使用 history 模式,生产服务器必须把未知路径回退到 index.html。
常见问题
| 问题 | 检查项 |
|---|---|
地址仍是 /pages/... |
确认插件位于 uni() 前面,并确认 manifest.json 使用 history 模式 |
| 公开地址刷新 404 | 配置服务器 SPA fallback 到 index.html |
| 模糊地址未命中 | 检查全局 fuzzy 或页面 routeFuzzy 是否为 true |
| 构建提示路由冲突 | 检查真实路径、公开路径和模糊路径是否重复 |

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 98
赞赏 0
下载 12687886
赞赏 1956
赞赏
京公网安备:11010802035340号