引言

Vue router给我们提供了两种路由模式,分别是hash模式和history模式。其中默认是使用hash模式,即URL中带有一个#符号,但是处于业务或个人喜爱的差别,Vue router也提供了history模式。但是由于Vue是单页SPA应用,所以每个路由并没有对应的html文件。

什么是history模式

history模式特点

  • history模式使用浏览器的history API来管理路由状态,而不是依赖于URL中的哈希。
  • 在history模式下,URL看起来更加整洁,没有#符号。例如,http://example.com/user/profile。
  • history模式可以在不刷新整个页面的情况下,通过改变URL来切换页面,实现更加流畅的用户体验

history模式的优缺点

优点:

  1. 更友好的URL:history模式下的URL看起来更加整洁,没有特殊字符(如#),给用户提供了更好的阅读体验。
  2. 无刷新页面切换:使用history模式时,页面切换不会导致整个页面的刷新,仅仅改变URL,从而实现更加流畅的用户体验。
  3. 更好的SEO:搜索引擎对于history模式下的页面更容易进行抓取和索引,因为URL更加直观、语义化。
  4. 路由传参更方便:相比hash模式的URL传参,history模式下的传参更加直观简洁,参数可以直接通过URL的路径进行表示。

缺点:

  1. 服务器配置要求:使用history模式需要服务器的支持,因为URL改变时,要确保服务器能正确地展示相应的页面,需要进行一些额外的服务器配置。
  2. 兼容性问题:history模式在一些旧版本的浏览器(如IE9及以下)中不被支持,如果要兼容这些浏览器,可能需要降级为hash模式。
  3. 开发环境要求:当使用history模式时,需要在开发环境中配置一个服务器来模拟URL的请求,以确保路由正常运行,相比hash模式需要更多的配置。

如何配置Vue Router使用history模式

- 首先我们需要创建一个Vue项目

   - 安装Vue Router

npm i vue-router

- 在Vue项目中配置Vue Router使用history模式

import Vue from 'vue';
import VueRouter from 'vue-router'; Vue.use(VueRouter); const router = new VueRouter({
  mode: 'history',
  routes: [
    // 路由配置
  ]
}); export default router;
  1. 服务器配置

       - 配置服务器,使得所有路由的URL都指向入口页面,我们用nginx配置举例:
server {
  listen 80;
  server_name your_domain.com;
  root /path/to/your/vue_app/dist;
  index index.html;
  location / {
    try_files $uri $uri/ /index.html;
  }
} # 在以上配置中,需要进行以下调整:
# 1. server_name:将your_domain.com替换为您的域名。
# 2. root:将/path/to/your/vue_app/dist替换为您的Vue应用的编译输出目录。
# 3. index:确保index.html是您的Vue应用的入口页面。 # 配置解释:
# • location /:此处表示对所有的请求都生效。
# • try_files $uri $uri/ /index.html:当请求的文件或目录不存在时,将请求重定向到index.html。这使得所有的路由请求都指向了Vue应用的入口页面,使得应用能够正确地处理动态路由。

处理404页面

// 在路由配置中定义一个名为NotFound的路由
const routes = [
  // 其他路由配置...
  { path: '/404', name: 'NotFound', component: NotFoundComponent },
  { path: '*', redirect: '/404' }
] // 创建Vue Router实例并将路由配置应用于它
const router = new VueRouter({
  mode: 'history',
  routes
}) // 导航守卫用于捕获404错误
router.beforeEach((to, from, next) => {
  // 如果目标路由不存在,重定向到404页面
  if (to.matched.length === 0) {
    next('/404');
  } else {
    next();
  }
})

配置publicPath

如果你希望你的Vue应用打完包以后,所有路由的前缀都加上/v1/test,那么你需要对原有的配置做一下修改

vue.config.js

publicPath这里需要判断一下是否为生产环境,如果是生产环境,我们需要加上前缀,这样在读取js、css等文件时才能访问到正确的路径。如果是开发环境,基本URL配置为'/'即可。在开发环境中,我们的应用通常运行在一个本地的开发服务器上(例如:localhost:8080),而不是真实的生产环境服务器(例如:https://www.example.com)。因此,'/'可以作为根路径来访问我们的应用,而不需要添加任何前缀。

module.exports = {
  // 部署应用包的基本URL
  publicPath: process.env.NODE_ENV === 'production' ? '/v1/test/' : '/',
  devServer: {
    port: 8080,
    open: true,
    proxy: {}
  }
}

nginx配置

server {
  listen 80;
  server_name your_domain.com;
  root /path/to/your/vue_app/dist;
  index index.html;
  location /v1/test { # 这里location需要加上/v1/test
    try_files $uri $uri/ /index.html;
  }
}

介绍Vue router的history模式以及如何配置history模式的更多相关文章

  1. 解决IE报错[vue router]Failed to resolve async component default:strict 模式下不允许分配到只读属性

    之前遇到过一个奇怪的问题,在其他浏览器下一切正常,但在万恶的IE下,却一直不行. 具体问题场景就是:比如orderDetail页面出现问题,那么只要是路由跳转的,点第1次无法跳转,必须得点第2次才可以 ...

  2. vue router的浏览器跳转行为

    最近做的项目中,涉及vue router 路由操作,其操作方法不同,产生的行为亦不同.本文通过对比实验,对其行为进行实验对比及总结,避免混淆. vue router的单页跳转的history模式,类似 ...

  3. vue router使用query和params传参的使用

    传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,希望可以帮到大家. Vue ...

  4. (转)vue router 如何使用params query传参,以及有什么区别

    写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...

  5. 04 Vue Router路由管理器

    路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...

  6. vue router 如何使用params query传参,以及有什么区别

    写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...

  7. Vue Router路由管理器介绍

    参考博客:https://www.cnblogs.com/avon/p/5943008.html 安装介绍:Vue Router 版本说明 对于 TypeScript 用户来说,vue-router@ ...

  8. Vue路由配置history模式

    我的博客: https://github.com/Daotin/fe-notes/issues vue需要node.js吗? 你可以用 script 标签的形式引入vue.min.js 这样的,不需要 ...

  9. Apache支持Vue router使用 HTML5History 模式

    一.前言 前端Vue router 使用history模式,URL会比hash模式好看,这种模式要玩好,还需要后端配置支持,否则会报404错误. 注:1.前端代码省略. 2.此处后台使用Apache服 ...

  10. vue router mode 设置"hash"与"history"的区别

    router官网的说明如下: ********************************************我是官网说明分隔符--开始**************************** ...

随机推荐

  1. VMware另一个程序锁定文件的一部分,进程无法访问

    问题描述:搭建RAC11g,在做共享磁盘的时候,节点2要共享节点1的磁盘,但是有一个问题,节点2关机之后,再打开,是有一个访问节点1的磁盘的过程,如果访问失败,就会开不了机器 rac1加的三个磁盘: ...

  2. 【前端基础】(一)Es6新特性

    1 Es6 全称为ECMAScript是浏览器脚本语言的规范,而各种我们熟知的js语言则是规范的具体体现. 1.1 Es6新特性 ① let与var 作用域 <script> { var ...

  3. Kubernetes入门实践(YAML)

    YAML是Kubernetes的标准工作语言 YAML介绍 Kubernetes使用了YAML语言一个非常关键的特性,叫作"声明式",对应的有另外一个词: "命令式&qu ...

  4. Elasticsearch搜索功能的实现(五)-- 实战

    实战环境 elastic search 8.5.0 + kibna 8.5.0 + springboot 3.0.2 + spring data elasticsearch 5.0.2 + jdk 1 ...

  5. 【Dotnet 工具箱】WPF UI - 现代化设计的开源 WPF 框架

    1.WPF UI - 现代化设计的开源 WPF 框架 WPF UI 是一个基于 C# 开发的, 拥有 4k star 的开源 UI 框架.WPF UI 在 WPF 的基础上,提供了更多的现代化,流利的 ...

  6. 重复delete 对象指针后的 异常调用栈怪异 解析

    Release版VC6 MFC程序 程序正常退出时得到一个如下异常调用栈: 0:000> kb # ChildEBP RetAddr Args to Child WARNING: Frame I ...

  7. 统计计算——Bootstrap总结整理

    Bootstrapping Boostrap 有放回的重抽样. 符号定义: 重复抽样的bootstrap \(F^*\) 观测到的样本\(\hat F\),是一个经验分布 真实分布\(F\) Eg. ...

  8. JS逆向实战13——某市公共资源交易中心Cookie混淆加密

    "本文地址:https://www.cnblogs.com/zichliang/p/17346860.html 目标网站 aHR0cDovL2xkZ2d6eS5obmxvdWRpLmdvdi ...

  9. PHP前后端交互

    PHP是现如今十分流行的轻量级语言,经常用来做应用的后端开发,其特点是语法简单,十分容易上手.除了单独做后端,PHP还能够将程序嵌入到HTML文件中执行,非常容易实现简单的前后端交互.而且PHP的运行 ...

  10. thinkphp常量定义

    是已经封装好的系统常量 主要是用在控制器下面的动作当中 这样能很大的提高我们的开发效率主要有下面的一些     手册上面都有的     __ROOT__ 网站的根目录     __APP__ 代表项目 ...