一:概述
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模式的配置。