VUE的history模式下除了index外其他路由404报错解决办法


Posted in Javascript onAugust 21, 2019

我们先来看下代码:

location / {
index index.html;
root /dist;
try_files $uri $uri/ /index.html;
}

try_files首先会判断他是文件,还是一个目录,结果发现他是文件,与第一个参数 $uri变量匹配。
然后去到网站目录下去查找文件是否存在,如果存在直接读取返回。如果不存在直接跳转到第三个参数.

现在不明白的是既然跳到了index为什么显示的还是路由后的界面

内容扩展:

问题背景:

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、

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 相关文章推荐
jQuery学习4 浏览器的事件模型
Feb 07 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
js数组依据下标删除元素
Apr 14 Javascript
Javascript常用小技巧汇总
Jun 24 Javascript
简要了解jQuery移动web开发的响应式布局设计
Dec 04 Javascript
详解angularjs利用ui-route异步加载组件
May 21 Javascript
IntersectionObserver实现图片懒加载的示例
Sep 29 Javascript
详解在vue-test-utils中mock全局对象
Nov 07 Javascript
vue中轮训器的使用
Jan 27 Javascript
p5.js实现故宫橘猫赏秋图动画
Oct 23 Javascript
angular中的post请求处理示例详解
Jun 30 Javascript
js实现tab栏切换效果
Aug 02 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 #jQuery
jqGrid表格底部汇总、合计行footerrow处理
Aug 21 #Javascript
Vue仿微信app页面跳转动画效果
Aug 21 #Javascript
Angular 中使用 FineReport不显示报表直接打印预览
Aug 21 #Javascript
深入理解Vue keep-alive及实践总结
Aug 21 #Javascript
vue element 生成无线级左侧菜单的实现代码
Aug 21 #Javascript
微信小程序仿今日头条导航栏滚动解析
Aug 20 #Javascript
You might like
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
使用PHP编写的SVN类
2013/07/18 PHP
PDO::commit讲解
2019/01/27 PHP
一段实时更新的时间代码
2006/07/07 Javascript
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
JS中的作用域链
2017/03/01 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
Python机器学习之决策树算法实例详解
2017/12/06 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Python----数据预处理代码实例
2019/03/20 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
flask框架路由常用定义方式总结
2019/07/23 Python
python找出因数与质因数的方法
2019/07/25 Python
Python如何进行时间处理
2020/08/06 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
法学专业个人求职信
2013/09/26 职场文书
个人培训自我鉴定
2014/03/28 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
黄河绝恋观后感
2015/06/08 职场文书
百家讲坛观后感
2015/06/12 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers