从 createWebHashHistory() 迁移到 createWebHistory() 有什么影响?
What are the implications of migrating from createWebHashHistory() to createWebHistory()?
我发布了一个使用 createWebHashHistory()
来管理 URL 的应用程序。例如,用户访问以下 URL 来访问一个叫做地震频道的东西:
https://app.radar.chat/#/channel/earthquakes
我想改为使用 createWebHistory()
来管理 URL(SEO、社交媒体预览、iOS 通用 link 配置等) .考虑到这一点,我希望我的新 URL 结构如下所示:
https://app.radar.chat/channel/earthquakes
我知道要支持此更改,我需要更改服务器。最简单的方法是让服务器将传入请求重定向到 index.html 文件(这是 documented extensively on the Vue website)。
但是,这些旧页面 link 在野外有 URL,URL 已打印且永远无法更新。
是否有一种方便的机制可以继续支持旧的基于散列的 URL,同时让非散列的 URL 成为新的默认值?
在您的路由器配置中,您可以在索引路径上添加一个 global beforeEach
hook 以解析为 URL 中的哈希路径(如果存在):
// router.js
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes: [⋯]
})
router.beforeEach((to, from, next) => {
if (to.path === '/' && to.hash.startsWith('#/')) {
next(to.hash.substr(1))
} else {
next()
}
})
export default router
我发布了一个使用 createWebHashHistory()
来管理 URL 的应用程序。例如,用户访问以下 URL 来访问一个叫做地震频道的东西:
https://app.radar.chat/#/channel/earthquakes
我想改为使用 createWebHistory()
来管理 URL(SEO、社交媒体预览、iOS 通用 link 配置等) .考虑到这一点,我希望我的新 URL 结构如下所示:
https://app.radar.chat/channel/earthquakes
我知道要支持此更改,我需要更改服务器。最简单的方法是让服务器将传入请求重定向到 index.html 文件(这是 documented extensively on the Vue website)。
但是,这些旧页面 link 在野外有 URL,URL 已打印且永远无法更新。
是否有一种方便的机制可以继续支持旧的基于散列的 URL,同时让非散列的 URL 成为新的默认值?
在您的路由器配置中,您可以在索引路径上添加一个 global beforeEach
hook 以解析为 URL 中的哈希路径(如果存在):
// router.js
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes: [⋯]
})
router.beforeEach((to, from, next) => {
if (to.path === '/' && to.hash.startsWith('#/')) {
next(to.hash.substr(1))
} else {
next()
}
})
export default router