Vue.js通配符路由匹配失败求助:跳转至首页异常
问题分析与解决方案
首先,你的核心问题出在路由path中错误包含了#,这和通配符本身的使用无关,也不是#属于保留命名空间的问题——下面详细拆解:
1. 为什么当前配置不生效?
在Vue Router的hash模式下,URL中的#是浏览器用来区分哈希路由的分隔符,路由配置里的path只需要对应#后面的部分,不需要把#写进去。
你当前写的path: '/#/reset*'会被Vue Router解析为「匹配整个URL路径为/#/reset...的地址」,但实际你的URL是mywebsite.com/#/reset-password——这里的路径部分(#之前)是/,哈希部分(#之后)是/reset-password,所以你的路由规则完全匹配不上,最终会触发最优先匹配的/首页路由,导致页面跳转到首页。
2. 通配符的正确用法 & 路由顺序注意事项
如果你想匹配所有以reset开头的路径(比如/reset-password、/reset-token等),可以用通配符,但要注意两个关键点:
- 去掉path中的
#,写成path: '/reset*' - 路由顺序必须正确:带通配符的路由(包括你的404路由
path: '*')必须放在所有更具体的路由后面,否则会提前匹配,导致其他路由无法生效。
如果只需要匹配/reset-password这一个具体路径,直接写path: '/reset-password'会更精准,避免不必要的通配匹配。
3. 修正后的路由配置示例
const routes = [ // 首页路由放在最前面 { path: '/', name: 'Home', component: Home }, // 重置密码路由(可选通配或具体路径) { path: '/reset*', // 或者直接写 '/reset-password' name: 'Confirm Reset Password', meta: { title: `Confirm password reset` }, component: ConfirmResetPassword }, // 404路由必须放在最后 { path: '*', name: '404', meta: { title: `Page not found` } } ]
4. 补充说明
#本身不是Vue Router的保留命名空间,它只是浏览器哈希路由的标准标识。在配置路由时,只需要关注#后面的路径部分即可,不需要在path中包含#。
内容的提问来源于stack exchange,提问作者Isaac Joy




