vue改hash模式为history模式
之前项目中使用的是hash模式,企业微信创建自建应用配置首页(https://xx/x/#/transferPage)#号后的部署到nginx上,会当作注释处理,故改hash模式为history模式
open.weixin.qq.com/connect/oau…
一:概述
vue-router可以设置两种模式:hash和history
首先要设置路由的mode和base两个值,如下:
const routes = [...]
export const router = new VueRouter({
mode: 'history', // 访问路径不带井号 需要使用 history模式
base: process.env.BASE_URL,
routes,
});
其次要设置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' ? './' : '/yxy/',
......
}
至此,前端的配置工作就结束了。
服务端配置(这里以nginx为例)
location /yxy {
alias /home/server/yxy/;
index index.html;
try_files $uri $uri/ /yxy/index.html;
}
location /yxy表示项目部署在了 /yxy目录下,这里要跟vue.config.js里的publicpath的值保持一致。
之所以刷新页面白屏,其实是因为路由资源不存在,以本项目为例(transferPage为首页路由的参数):
当访问上述路由时,其实根本就不存在相应的资源,当然会404了,为了避免这种情况的发生,可以让所有的路由都指向index.html就可以解决问题了
在nginx上进行设置: try_files uri/ /yxy/index.html 即可。
至此,也就实现了所有的history模式的配置。