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/',
  
  ......

}

如下图所示:

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

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

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

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模式的配置。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值