背景

vue中默认的路由模式是hash,会出现烦人的符号#,如http://127.0.0.1/#/
改为history模式可以解决这个问题,但是有一个坑是:强刷新、回退等操作会出现404。

Vue改用History路由模式

修改src/router/index.js

export default new Router({
mode: 'history', //改为history模式
routes: [
{
path: '/pub',
component:Empty
}
]
})

解决History模式404的问题

原理:增加中间件的配置(如nginx),所有未匹配到的路由都返回index.html。
官方文档:https://router.vuejs.org/zh/guide/essentials/history-mode.html

这里介绍一种官方文档没有的,使用Golang的Gin框架解决404的问题。

router := gin.New()
router.Use(gin.Recovery()) // 注册静态文件
router.Static("/pub", "./pub")
router.Static("/static", "./pub/static")
router.LoadHTMLGlob("./pub/*.html") //加载index.html文件 //处理首页的访问
router.GET("/", func(c *gin.Context) {
c.Redirect(http.StatusFound, "./pub/index.html")
}) //【关键点】:把所有找不到路由的请求,都返回index.html
router.NoRoute(func(c *gin.Context) {
c.HTML(http.StatusOK,"index.html",nil)
}) //启动http服务
router.Run()

关键是这行代码:

router.NoRoute(func(c *gin.Context) {
c.HTML(http.StatusOK,"index.html",nil)
})

写在后面

既然所有找不到路由的请求都返回index.html,那真正404的请求就不会显示404了。
所以在vue的src/router/index.js中要这样设置:

export default new Router({
mode: 'history',
routes: [
{
path: '/pub',
component:Empty
},
{
path: '*', //其他路由显示404
component: NotFound,
}
]
})

这一点在官方文档中也有提到。

那年,京城郭少,23岁

解决Vue中使用history路由模式出现404的问题的更多相关文章

  1. [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制

    一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...

  2. 单页面应用的History路由模式express后端中间件配合

    这篇文章主要分享一下通过HTML5的history API的时候,使用NodeJS后端应该如何配置,来避免产生404的问题,这里是使用的express的框架,主要是通过connect-history- ...

  3. vue中怎样实现 路由拦截器

    vue中怎样实现 路由拦截器(当用户没有登录的时候,跳转到登录页面,已经登录的时候,不能跳转到登录页,除非后台token失效) 在 我们需要实现这样 一个功能,登录拦截 其实就是 路由拦截,首先在定义 ...

  4. Vue history路由模式 apache配置上线

    1. 首先在vue项下的router.js 文件配置 mode为history模式,并且设置好对应的base选项 说明:base配置为你当前项目实际上线时所在的目录文件夹, 我这就是放在站点的根目录下 ...

  5. 【翻译】使用Vuex解决Vue中的身份验证

    翻译原文链接:https://scotch.io/tutorials/handling-authentication-in-vue-using-vuex 我的翻译小站:https://www.zcfy ...

  6. history路由模式下的nginx配置

    路由模式 众所周知,浏览器下的单页面应用的路由模式有下面两种: hash 模式和 history 模式.hash 模式通用性好,而且不依赖服务器的配置,省心省力,但是缺点是不够优雅.相比于 hash ...

  7. 解决vue中BMap未定义问题

    原文链接: 点我 最近在项目中使用了百度地图来显示物流信息,实现方式有两种: 引用Vue Baidu Map引用BMap存在的问题:\color{red}{存在的问题:}存在的问题::使用BMap可以 ...

  8. 解决Vue中文本输入框v-model双向绑定后数据不显示的问题

    前言 项目中遇到一个问题就是在Vue中双向绑定对象属性时,手动赋值属性后输入框的数据不实时更新的问题. <FormItem label="地址" prop="eve ...

  9. 解决VUE中document.documentElement.scrollTop为0(转)

    原文地址:https://blog.csdn.net/WDCCSDN/article/details/82107374 Vue中document.documentElement.scrollTop的值 ...

  10. 解决Vue中"This dependency was not found"的方法

    今天在初始化项目中,出现了一个奇怪的情况:明明路径是对的,但是编译的时候,一直报"This dependency was not found"的错. 代码如下: import Vu ...

随机推荐

  1. [BlockChain] 三方互惠是公共区块链得以发展的基石, dApp数字通证的运转需要可持续性玩法

    ------------------------------- 公链 旷工    开发者/用户 ------------------------------- -------------------- ...

  2. WPF 使用 Dispatcher 的 InvokeAsync 和 BeginInvoke 的异常处理差别

    一般认为 WPF 的 Dispatcher 的 InvokeAsync 方法是 BeginInvoke 方法的平替方法和升级版,接近在任何情况下都应该在业务层使用 InvokeAsync 方法代替 B ...

  3. 还在用Jenkins?快来试试这款比Jenkins简而轻的自动部署软件!

    大家好,我是 Java陈序员. 在工作中,你是否遇到过团队中没有专业的运维,开发还要做运维的活,需要自己手动构建.部署项目? 不同的项目还有不同的部署命令,需要使用 SSH 工具连接远程服务器和使用 ...

  4. Radash库使用说明——数组方法篇(全)

    写在前面 tips:点赞 + 收藏 = 学会! 本文包含radash中数组相关的所有方法说明 + 使用示例 + 思维导图查看 这边会整理出一份数组相关方法的使用大纲(不含源码解析),方便大家查阅使用: ...

  5. VMware虚拟机安装Centos-7.9

    VMware虚拟机安装Centos-7.9 创作不易,点赞关注一下吧 1.安装VMware Workstation Pro 大家根据自己的实际情况安装合适版本的VMware Workstation P ...

  6. C语言:对fgets进行封装

    因为fgets在赋值完字符后,在最后会加一个\n换行符,所以为了能够把数组当成字符串,就必须把\n改成\0 代码: #include<stdio.h> #include<stdlib ...

  7. 深入Django项目实战与最佳实践

    title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: ...

  8. vue.js的M-V-VM思想

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式. Model 指代的就是vue对象的data属性里面的数据.这里的数据要显示到页面中. View 指代的就 ...

  9. CSS——基本选择器

    例子: <head> <meta charset="UTF-8"> <title>Title</title> <style&g ...

  10. Android 13 - Media框架(29)- MediaCodec(四)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们了解了如何通过 onInputBufferAvailable 和 getInputBuffer 获取到 input buffer inde ...