vue-router之hash与history,以及nginx配置
本篇讲解前端项目的路由模式(以vue-router为例),以及history模式下的项目部署问题。
vue-router的路由模式可以通过指定mode属性值控制,可选值:"hash" 、"history"、 "abstract" , 默认:"hash" (浏览器环境) , "abstract" (Node.js 环境)
const router = new VueRouter({
mode: 'history',
routes: [...]
})
路由表里的兜底配置
hash与history
Hash模式
通过 onhashchange 方法监听hash的改变来实现
- Hash模式是基于锚点,以及onhashchange事件
- URL中#后面的内容作为路径地址
- 监听
hashchange事件 - 根据当前路由地址找到对应组件重新渲染
History模式
通过 onpopstate 方法监听history的改变来实现
- History模式是基于HTML5中的History API
- 通过
history.pushState()方法改变地址栏 IE 10 以后才支持 - 监听
popstate事件 history.replaceState()- 根据当前路由地址找到对应组件重新渲染
History模式的使用,以及nginx配置
- History 需要服务器的支持
- 单页应用中,服务端不存在
http://www.testurl.com/login这样的地址,会返回找不到该页面 - 在服务端应该除了静态资源外都返回单页应用的
index.html,比如:http://www.testurl.com/login.html
history需要服务器支持,我们使用node或nginx
http://localhost:8080/main/home
nginx处理方式
在nginx的html根目录部署一个项目,然后新开一个文件夹,部署另一个项目,nginx.conf
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html
}
try_files:
- $uri: 当前请求路由
这句话意思是尝试请求当前路由,如果请求不到,就返回当前目录下的index.html
nginx root 和 alias 的区别
location /i/ {
alias /spool/w3/images/;
}
# "/i/top.gif" -> "/spool/w3/images/top.gif"
location /i/ {
root /spool/w3;
}
# "/i/top.gif" -> "/spool/w3/i/top.gif"
alias把匹配到的路径重写, 注意要以/结尾root在匹配到的路径前面,增加root基础路径配置
配置完nginx.conf之后,重启nginx
问题
我的应用部署在一个子路径(/lily/)上,访问路径: https://www.xxxx/lily/
1、浏览器访问,显示空白页面,chunk加载失败
2、浏览器直接访问 /static/目录,显示403
3、访问 /main/home,显示nginx页面
4、页面刚进入可以正常显示,刷新之后就显示404
页面刚进入是redirect指向的资源可以正常加载,刷新后404一般来说就是配置和真实的路径不符合,需要指定try_files
5、首页可以正常显示,刷新页面或者跳转到别的页面报错
Uncaught SyntaxError: Unexpected token '<'
问题解决:
看起来像是跟root的配置有关,修改打包部署路径,和应用基路径base。
publicPath: IS_PROD ? '/lily/' : '/',
new Router({
mode: 'history',
base: '/lily/',
routes,
});
可以正常访问了
我是 甜点cc,个人网站: https://blog.i-xiao.space/
苏格拉底:“我知道我不知道。”
公众号:【看见另一种可能】
vue-router之hash与history,以及nginx配置的更多相关文章
- Vue路由器的hash和history两种工作模式 && Vue项目编译部署
1 # 一.Vue路由器的两种工作模式 2 # 1.对于一个uri来说,什么是hash值? 井号及其后面的内容就是hash值. 3 # 2.hash值不会包括含在HTTP请求中,即:hash值不会带给 ...
- vue中mode hash 和 history的区别
对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...
- vue路由history模式,nginx配置
nginx配置内容 # For more information on configuration, see: # * Official English Documentation: http://n ...
- Vue Router的原理及history模式源码实现
Hash 模式 URL中 # 后面的内容作为路径地址,可以通过location.url直接切换路由地址,如果只改变了#后面的内容,浏览器不会向服务器请求这个地址,会把这个地址 记录到浏览器的访问历史中 ...
- nginx----------前端写了一套带有vue路由的的功能。放到nginx配置的目录下以后,刷新会报404未找到。
1. 这是根据实际情况来写的. location /h5/activity/wechat/ { index index.html index.htm index.php; ...
- vue router mode 设置"hash"与"history"的区别
router官网的说明如下: ********************************************我是官网说明分隔符--开始**************************** ...
- vue 路由里面的 hash 和 history
对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...
- Vue路由的hash模式与history模式的区别?
1.首先router有两种模式:hash模式(默认).history模式(需配置mode: 'history') hash和history的区别? hash ...
- vue cli 3.x的history 和 hash模式切换的问题
使用vue cli 3.x 创建的项目,有一个选项:Use history mode for router? (Requires proper server setup for index fallb ...
- vue & $router & History API
vue & $router gotoTemplateManage(e) { e.preventDefault(); this.$router.push({ path: `/operate-to ...
随机推荐
- c++实战开发程序
非常感谢您的进一步提问,以下是一个对于实战开发小程序的更具体的建议: 第1周实战开发小程序建议:写一个简单的计算器程序,要求包含加.减.乘.除四种基本运算,并进行错误处理,例如输入了非法字符或者除数为 ...
- it必给装机小软件附源码
需要的包 启动之后是这个样子的 远吗如下: #authon fengimport zipfile as zfimport osimport win32apiimport win32conimport ...
- CommunityToolkit.Mvvm8.1 viewmodel源生成器写法(3)
本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址 ...
- 重新理解RocketMQ Commit Log存储协议
本文作者:李伟,社区里大家叫小伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云Ro ...
- AspectCore和MSDI 实现Name注册以及解析对象
AspectCore 在注册服务这块比较简单,默认是无法根据Name去注册和解析对象,这边做一下这块的扩展 大致原理是根据自定义Name去生成对应的动态类型,然后使用委托或者对象的方式,进行注册 ti ...
- ts中报错信息收集
1. 错误代码 参考:https://www.mmbyte.com/article/92849.html 1 state.localuserInfo = JSON.parse(localStorage ...
- MySQL-分组函数ROLLUP的基本用法
一.ROLLUP简介 ROLLUP是GROUP BY子句的扩展. ROLLUP选项允许包含表示小计的额外行,通常称为超级聚合行,以及总计行. 通过使用ROLLUP选项,可以使用单个查询生成多个分组集. ...
- Unity2021SteamingAssets数量限制导致打包异常解决
最近将项目从Unity2019升级到Unity2021,打包安卓的时候出现异常.查了下资料说是数量超出限制,需要设置不压缩的数量. 1. 使用自定义mainTemplate.gradle 打开编辑,a ...
- 2022-06-01:给定一个数组arr,可能有正、有负、有0,无序。 只能挑选两个数字,想尽量让两个数字加起来的绝对值尽量小。 返回可能的最小的值。
2022-06-01:给定一个数组arr,可能有正.有负.有0,无序. 只能挑选两个数字,想尽量让两个数字加起来的绝对值尽量小. 返回可能的最小的值. 答案2022-06-01: 排序,双指针. 代码 ...
- 2022-05-02:给定一个数组arr,一个正数num,一个正数k, 可以把arr中的某些数字拿出来组成一组,要求该组中的最大值减去最小值<=num, 且该组数字的个数一定要正好等于k, 每个数字只
2022-05-02:给定一个数组arr,一个正数num,一个正数k, 可以把arr中的某些数字拿出来组成一组,要求该组中的最大值减去最小值<=num, 且该组数字的个数一定要正好等于k, 每个 ...