Vue路由history模式解决404问题的几种方法


Posted in Javascript onSeptember 29, 2018

问题背景:

vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载。但是如果我们不想hash这种以#号结尾的路径时候的话,我们可以使用路由的history的模式。比如如下网址:使用hash模式的话,那么访问变成 http://localhost:8080/bank/page/count/#/ 这样的访问,如果路由使用 history的话,那么访问的路径变成 如下:http://localhost:8080/bank/page/count 这样的了;

不过history的这种模式需要后台配置支持。比如:当我们进行项目的主页的时候,一切正常,可以访问,但是当我们刷新页面或者直接访问路径的时候就会返回404,那是因为在history模式下,只是动态的通过js操作window.history来改变浏览器地址栏里的路径,并没有发起http请求,但是当我直接在浏览器里输入这个地址的时候,就一定要对服务器发起http请求,但是这个目标在服务器上又不存在,所以会返回404

怎么解决呢?我们现在可以把所有请求都转发到 http://localhost:8080/bank/page/index.html上就可以了。

解决方案:

对于VUE的router[mode: history]模式在开发的时候,一般都不出问题。是因为开发时用的服务器为node,Dev环境中自然已配置好了。

但对于放到nginx下运行的时候,自然还会有其他注意的地方。总结如下:

在nginx里配置了以下配置后, 可能首页没有问题,但链接其他会出现(404)

location / {
      root  D:\Test\exprice\dist;
      index index.html index.htm;
      try_files $uri $uri/ /index.html;
      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Allow-Credentials' 'true';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
      add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    }
    
    location ^~/api/ {
      proxy_pass  http://39.105.109.245:8080/;
    }

为了解决404,需要通过以下两种方式:

1、官网推荐

location / {
root  D:\Test\exprice\dist;

index index.html index.htm;

try_files $uri $uri/ /index.html;

2、匹配errpr_page

location /{
root  /data/nginx/html;

index index.html index.htm;

error_page 404 /index.html;
}

3、 (vue.js官方教程里提到的https://router.vuejs.org/zh-cn/essentials/history-mode.html)

server {
    listen    8888;#默认端口是80,如果端口没被占用可以不用修改
    server_name localhost;
    root    E:/vue/my_project/dist;#vue项目的打包后的dist
    location / {
      try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
      index index.html index.htm;
    }
    #对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
    #因此需要rewrite到index.html中,然后交给路由在处理请求资源
    location @router {
      rewrite ^.*$ /index.html last;
    }
    #.......其他部分省略
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中函数声明优先于变量声明的实例分析
Mar 01 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 Javascript
使用javascript为网页增加夜间模式
Jan 26 Javascript
JS常用表单验证方法总结
May 22 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
网页中表单按回车就自动提交的问题的解决方案
Nov 03 Javascript
js实例属性和原型属性示例详解
Nov 23 Javascript
jQuery中:contains选择器用法实例
Dec 30 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
微信小程序中单位rpx和rem的使用
Dec 06 Javascript
layui prompt 设置允许空白提交的方法
Sep 24 Javascript
微信小程序tab左右滑动切换功能的实现代码
Feb 08 Javascript
对vue v-if v-else-if v-else 的简单使用详解
Sep 29 #Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
Sep 29 #Javascript
浅谈针对Vue相同路由不同参数的刷新问题
Sep 29 #Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 #Javascript
详解React之key的使用和实践
Sep 29 #Javascript
vue给组件传递不同的值方法
Sep 29 #Javascript
vue动画之点击按钮往上渐渐显示出来的实例
Sep 29 #Javascript
You might like
php strtotime 函数UNIX时间戳
2009/01/14 PHP
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
2010/03/01 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
es6数值的扩展方法
2019/03/11 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
python编码总结(编码类型、格式、转码)
2016/07/01 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
python操作链表的示例代码
2020/09/27 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
少先队学雷锋活动月总结
2014/03/09 职场文书
小组口号大全
2014/06/09 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
初级党校心得体会
2014/09/11 职场文书
大学生简短的自我评价
2014/09/12 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
导游词之日本富士山
2020/01/06 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang