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 相关文章推荐
动态样式类封装JS代码
Sep 02 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
Feb 27 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
Feb 11 Javascript
基于jquery实现即时检查格式是否正确的表单
May 06 Javascript
老生常谈JavaScript数组的用法
Jun 10 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
js实现Tab选项卡切换效果
Jul 17 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
Jul 08 Javascript
node(koa2) web应用模块介绍详解
Mar 29 Javascript
使用jQuery实现掷骰子游戏
Oct 24 jQuery
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
详解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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
php自定义函数截取汉字长度
2014/05/15 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
JavaScript的变量作用域深入理解
2009/10/25 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
在Python中移动目录结构的方法
2016/01/31 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
python时间日期操作方法实例小结
2020/02/06 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
门诊手术室工作制度
2014/01/30 职场文书
个人查摆剖析材料
2014/02/04 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
家长给老师的感谢信
2015/01/20 职场文书
清洁工岗位职责
2015/02/13 职场文书
运动会观后感
2015/06/09 职场文书
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers