【问题标题】:Vue Router not working once production is built构建生产后,Vue路由器无法正常工作
【发布时间】:2019-11-13 03:18:41
【问题描述】:

当我使用 dev 构建 Vue 项目时,它可以正常工作。但是,一旦我运行 npm run build 并将 dist 中的文件移动到我的网络服务器,Vue Router 似乎不再工作了。

我试过删除历史模式,但是没有用。

Vue 路由器

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import axios from 'axios'

Vue.use(Router)

const router =  new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/donate',
      name: 'donate',
      component: () => import('./views/Donate.vue')
    },
    {
      path: '/guildselector',
      name: 'guildselector',
      meta: {
        requiresAuth: true
      },
      component: () => import('./views/Guildselector.vue')
    },
    {
      path: '/guild/:id',
      name: 'guild',
      meta: {
        requiresAuth: true,
        requiresAdmin: true
      },
      component: () => import('./views/Guildpanel.vue')
    }
  ]
})

export default router

MyWebsite.com/guildselector 应该显示 Guildselector 组件,但是我得到一个

Not Found The requested URL /guildselector was not found on this server.

只有捐赠页面和登录页面有效。

【问题讨论】:

  • 如果您将开发部署的文件复制到您的网络服务器上,它是否也可以工作?
  • 是的。只是生产版本不起作用。

标签: vue.js vue-cli


【解决方案1】:

这是一个很常见的问题;请阅读HTML5 History Mode 详细了解如何配置您的网络服务器以正确托管文件。

不过,问题来了:由于我们的应用是单页客户端应用,没有适当的服务器配置,如果用户直接在浏览器中访问http://oursite.com/user/id,将会收到 404 错误。

简单的解决方案就是评论这一行:

mode: 'history',

【讨论】:

  • 我的 Apache 服务器与那篇文章中的配置完全相同。我不确定我还能做什么。
  • Vue Router 文档为您提供了大量 Apache 配置,但没有告诉您将其放在哪里。我首先尝试在 Apache conf.d 目录中添加一个文件,但没有奏效。然后我在 web 根目录中创建了一个 .htaccess 文件。它仍然没有效果。事实证明,您需要在 httpd.conf 文件中查找 AllowOverride 指令并将其设置为“无”以外的其他内容。
  • router.vuejs.org/guide/essentials/… 的 mod_rewrite 示例对我不起作用。但是 FallbackResource 做到了。我刚刚创建了一个只有一行的 .htaccess 文件:FallbackResource index.html 并将它放在与我的 index.html 相同的文件夹中。这解决了它。
猜你喜欢
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 2011-12-09
  • 2021-10-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多