vue-router实现history模式配置

一:概述

vue-router可以设置两种模式:hash和history

const router = new VueRouter({

  mode: "hash",

  // mode: "history",

  routes

});

如果使用hash模式,一般无需特殊配置;

但如果要使用history模式,则前端和服务端要做一定的设置;

使用history模式通常本地调试没有什么问题,但是一旦发布到测试或生产环境,则会出现页面白屏或者刷新页面白屏的现象,这种问题的出现是因为前端和服务端没有做相应的配置。

二、实现history模式需要怎样配置

2.1、前端配置

首先要设置路由的mode和base两个值,如下:

const routes = [...]

const router = new VueRouter({
  mode: "history",
  base: process.env.BASE_URL,  // 如果使用history模式,必须设置base参数
  routes
});

export default router;

其次要设置vue.config.js里的publicPath,如下:

module.exports = {
  // publicPath默认值是'/',即你的应用是被部署在一个域名的根路径上
  // 设置为'./',可以避免打包后的静态页面空白
  // 当在非本地环境时,这里以项目test-daily为例,即打包后的h5项目部署服务器的test-daily目录下
  // 那么这里就要把publicPath设置为/test-daily/,表示所有的静态资源都在/test-daily/里
  // 打包部署后,会发现index.html引用的静态资源都添加了路径/test-daily/
  publicPath: process.env.NODE_ENV == 'development' ? './' : '/test-daily/',
  
  ......

}

如下图所示:

vue-router实现history模式配置

 至此,前端的配置工作就结束了。

2.2、服务端配置(这里以nginx为例)

官网其实有介绍,只是不太详细,这里直接上代码,如下:

vue-router实现history模式配置

location /test-daily表示项目部署在了 /test-daily目录下,这里要跟vue.config.js里的publicpath的值保持一致。

之所以刷新页面白屏,其实是因为路由资源不存在,以本项目为例(home为首页路由的参数):

https://test.xxx.yy/test-daily/home

当访问上述路由时,其实根本就不存在相应的资源,当然会404了,为了避免这种情况的发生,可以让所有的路由都指向index.html就可以解决问题了

在nginx上进行设置: try_files $uri $uri/ /test-daily/index.html        即可。

至此,也就实现了所有的history模式的配置。

上一篇:A Child's History of England.225


下一篇:回溯专题02