存在且通过内部正常工作的页面上的错误 404 link
Error 404 on a page that exists and that works fine through internal link
我在 Vue.js 上创建了一个包含多个页面的网站。
在本地一切正常,但是当我部署到 Heroku 时,所有页面 仅当我在我的菜单中单击重定向到的内部 link 时才有效相应的页面(使用路由器推送)。
当我尝试从浏览器直接访问/任何页面时,我收到 404 并显示一条消息 "Cannot GET /any-page" 而通过单击 link.
可以正确显示同一页面
正如我在本地提供我的应用程序时提到的那样,我没有遇到这个问题。
我真的看不出这是从哪里来的,在此先感谢您的帮助。
Heroku 正在提供您的 Vue 构建文件夹的内容。由于 Vue 将应用程序构建为单个 index.html 文件,因此只有主路径有效。
Vue 实际上并不导航到路由,而是使用历史 API 重写浏览器 url 并处理新路由的加载。
您可以使用以下选项之一:
选项 1
您可以在重新加载页面时使用 mode: "hash"
来修复路由。但是,这将在每条路线之前添加一个 #
。
const router = new VueRouter({
mode: "hash",
routes: [...]
})
选项 2
编写一个 Node.JS(例如 Express)应用程序,将每个请求路由到您的 index.html 文件。这称为 中间件
参考:https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations
官方 Vue CLI 文档中有专门针对 Heroku 的部署指南。
您会很快注意到相关信息:
static.json
{
"root": "dist",
"clean_urls": true,
"routes": {
"/**": "index.html"
}
}
对于 SPA(单页应用程序),您需要将每个路由指向索引。 Vue 路由器将负责导航到正确的页面。
我在 Vue.js 上创建了一个包含多个页面的网站。
在本地一切正常,但是当我部署到 Heroku 时,所有页面 仅当我在我的菜单中单击重定向到的内部 link 时才有效相应的页面(使用路由器推送)。
当我尝试从浏览器直接访问/任何页面时,我收到 404 并显示一条消息 "Cannot GET /any-page" 而通过单击 link.
可以正确显示同一页面正如我在本地提供我的应用程序时提到的那样,我没有遇到这个问题。
我真的看不出这是从哪里来的,在此先感谢您的帮助。
Heroku 正在提供您的 Vue 构建文件夹的内容。由于 Vue 将应用程序构建为单个 index.html 文件,因此只有主路径有效。
Vue 实际上并不导航到路由,而是使用历史 API 重写浏览器 url 并处理新路由的加载。
您可以使用以下选项之一:
选项 1
您可以在重新加载页面时使用 mode: "hash"
来修复路由。但是,这将在每条路线之前添加一个 #
。
const router = new VueRouter({
mode: "hash",
routes: [...]
})
选项 2
编写一个 Node.JS(例如 Express)应用程序,将每个请求路由到您的 index.html 文件。这称为 中间件
参考:https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations
官方 Vue CLI 文档中有专门针对 Heroku 的部署指南。
您会很快注意到相关信息:
static.json
{
"root": "dist",
"clean_urls": true,
"routes": {
"/**": "index.html"
}
}
对于 SPA(单页应用程序),您需要将每个路由指向索引。 Vue 路由器将负责导航到正确的页面。