vue-router的HTML5 History 模式设置

news/2024/7/10 1:12:14 标签: vue, router, HTML5, history

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

vue-routerHTML5 History 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。

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

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

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

所以,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。

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

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

既然是官方给出的配置,那肯定就会说的很官方咯~

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

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

我们的后端服务器是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 }
 ]
})

在路由文件中所有的路径前面加上服务器下项目所在的文件名即可,当然也包括和this.$router.push()中的路径,不然又是不讲道理的。

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


http://www.niftyadmin.cn/n/1301163.html

相关文章

C语言鱼类管理系统

#include <stdio.h>#include <stdlib.h>//内存分配#include <string.h>//字符串处理#include <conio.h>//用于getch() typedef struct fish{char name[20];//鱼名float price;//价格int num;//总数量int sell;//卖出的数量struct fish *next…

C语言图书管理系统

typedef struct p1{ char pname[30];//人的姓名 char pnum[30];//人的学号 char bname[4][30];//借的书名,最多四本 int bnum;//借书的数目}p; typedef struct b1{ char bname[30]; //书名 char author[30];//书的作者 char pname[30];//人的姓名 int jm;/…

vue router+vuex实现首页登录验证判断逻辑

首页登录逻辑要求在页面上判断是否获取到登录token &#xff0c;没有获取到则跳转到登录页。登录成功后&#xff0c;跳转到前一个页面。 1.vue router 路由判断首先我们想到的是router.beforeEach 前置导航守卫 &#xff0c;这个方法接受三个参数 to from next 。 to参数为即…

C语言小区居民查询系统

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h> typedef struct member//成员结构体 { char name[30];//姓名 char born[10];//出生日 int relation;//与户主关系 int sex;//姓别 struct member *next; }mem; typedef str…

详解vue-router 初始化时做了什么

vue router 的初始化使用步骤 我们首先来看 vue-router 的使用步骤&#xff0c;然后再分别去看各个步骤都发生了什么。 使用 vue-router 需要经过一下几个步骤&#xff1a; 引入 vue-router&#xff1a; import VueRouter from vue-router;利用 vue 的插件机制&#xff0c;…

C语言学籍管理系统

#include <stdio.h>#include <stdlib.h>//内存分配#include <string.h>//字符串处理#include <conio.h>//用于getch() typedef struct mark{char num[20];//学号int ch;//语int ma;//数int en;//外struct mark *next ;} m; typedef struct stud…

C语言学生选课系统

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h> //课程结构体typedef struct cou{ char name[40];//课程名 float sco;//成绩 struct cou* next;}cou; //学生结构体typedef struct stu{ int num;//学号 char …

vue-router 源码实现前端路由的两种方式

在学习 vue-router 的代码之前&#xff0c;先来简单了解一下前端路由。 前端路由主要有两种实现方法&#xff1a; Hash 路由History 路由 先来看看这两种方法的实现原理。 接着我们将用它们来简单实现一个自己的前端路由。 前端路由 Hash 路由 url 的 hash 是以 # 开头&a…