vue改hash模式为history模式

385 阅读1分钟

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为首页路由的参数):

test.xxx.yy/yxy/transfe…

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

在nginx上进行设置: try_files uriuri uri/ /yxy/index.html 即可。

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

原文链接:blog.csdn.net/ZhushiKezha…