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 相关文章推荐
ExtJS4如何给同一个formpanel不同的url
May 02 Javascript
js获取url中"?"后面的字串方法
May 15 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
Sep 22 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
Feb 21 Javascript
浅谈jquery中next与siblings的区别
Oct 27 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
Sep 21 Javascript
如何实现一个webpack模块解析器
Oct 24 Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 Javascript
js实现简单掷骰子小游戏
Oct 24 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
Oct 29 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
Apr 25 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
世界上第一台立体声收音机
2021/03/01 无线电
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
JS对文本框值的判断示例
2014/03/10 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
vue观察模式浅析
2018/09/25 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
python局域网ip扫描示例分享
2014/04/03 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
python的re模块使用方法详解
2019/07/26 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
4s店机修工岗位职责
2013/12/20 职场文书
学习党课思想汇报
2013/12/29 职场文书
人事部经理岗位职责
2014/03/07 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
MySQL分区表实现按月份归类
2021/11/01 MySQL