vue-router的HTML5 History 模式设置

VUE是当下最火爆的前端框架之一,vue-router是vue项目中几乎都会用到的组件,然而体验一时爽,其实坑很多。本篇经验将详细介绍vue-router的两种mode效果和开发测试环境下的问题,并给出解决方案。html

vue-router的HTML5 History 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须从新加载页面。前端

const router = new VueRouter({
 mode: 'history',
 routes: [...]
})

当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id, 就是长这样的!vue

不过这种模式要玩好,还须要后台配置支持。由于咱们的应用是个单页客户端应用,若是后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就尴尬了。nginx

因此,你要在服务端增长一个覆盖全部状况的候选资源:若是 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。vue-router

目先后端服务器有Apache、nginx、原生 Node.js、基于 Node.js 的 Express、Internet Information Services (IIS)、Caddy、Firebase 主机等。后端

先给一个官方标准版配置的传送门,请戳这里→ https://router.vuejs.org/zh/guide/essentials/history-mode.html浏览器

既然是官方给出的配置,那确定就会说的很官方咯~前端框架

按照官方给出的示例,将道理是成功的,可是官方给出的只局限于这个项目在服务器的根目录下! 若是你的项目没有放在根目录下,那么就是这么的不讲道理。服务器

下面是在实际开发中碰到的问题。app

咱们的后端服务器是nginx,因此按照官方的给出的配置,找到nginx.conf,照抄代码,修改完后重启服务器,讲道理是成功的。

server
{
  listen 80;
  server_name oursite.com;
  location /test/ {      
    alias /usr/local/test/;
    index index.htm index.html;
    #上面的就是一些常规配置,下面这个才是重点
    try_files $uri $uri/ /index.html;
 
    #这里没有采用官方给出处理404错误页面的方案
    #方案一(把全部没有后缀名的请求若是404都跳转到index.html,咱们没有采用)
    #error_page 404 /test/index.html;
 
    #方案二(404的方式,不是特别完美。会有浏览器留下404的状态(容易被第三方劫持),如下方式能够避免被第三方劫持!)
    if (!-e $request_filename) {
      rewrite ^/(.*) /test/index.html last;
      break;
    }//前端全栈学习交流圈:866109386
  }//帮助1-3年前端人员
}//突破技术瓶颈,提高思惟能力

可是,事实就是这么的不讲道理,咱们并无成功!这就使人非常郁闷了,心中一万只神兽羊驼,奔腾而过~ 为何没有成功呢,都是循序渐进作的呀,彻底不讲道理!

而真相只有一个,那就是~~~

路由文件中的路径有问题

const router = new VueRouter({
 mode: 'history',
 routes: [
  { path: '/test/', component: YourComponent },
  { path: '/test/a', component: YourComponent },
  { path: '/test/b:x', component: YourComponent }
 ]
})

在路由文件中全部的路径前面加上服务器下项目所在的文件名便可,固然也包括<router-link>和this.$router.push()中的路径,否则又是不讲道理的。

这只是在nginx服务器下的一种解决方案,至于别的服务器应该也是同理的。

相关文章
相关标签/搜索