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 相关文章推荐
javascript OFFICE控件测试代码
Dec 08 Javascript
javascript权威指南 学习笔记之变量作用域分享
Sep 28 Javascript
Package.js  现代化的JavaScript项目make工具
May 23 Javascript
JavaScript实现将文本框的值插入指定位置的方法
Aug 13 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
Dec 20 Javascript
js获取当前周、上一周、下一周日期
Mar 19 Javascript
js设置随机切换背景图片的简单实例
Nov 12 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
Sep 05 Javascript
使用flow来规范javascript的变量类型
Sep 12 Javascript
node.js Promise对象的使用方法实例分析
Dec 26 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
Dec 24 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
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
跟老齐学Python之开始真正编程
2014/09/12 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
python3实现飞机大战
2020/11/29 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
内业资料员岗位职责
2014/01/04 职场文书
计算机专业优秀大学生自我总结
2014/01/21 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
营销计划书范文
2015/01/17 职场文书
安全责任书
2015/01/29 职场文书
护士求职自荐信范文
2015/03/04 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
孝女彩金观后感
2015/06/10 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书