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使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
jquery实现背景墙聚光灯效果示例分享
Mar 02 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
checkbox勾选判断代码分析
Jun 11 Javascript
javascript实现图片循环渐显播放的方法
Feb 24 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
Nov 04 Javascript
jQuery定义插件的方法
Dec 18 Javascript
angular中实现控制器之间传递参数的方式
Apr 24 Javascript
微信小程序App生命周期详解
Jan 31 Javascript
vue input输入框模糊查询的示例代码
May 22 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
解决vue打包后vendor.js文件过大问题
Jul 03 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
php输出xml格式字符串(用的这个)
2012/07/12 PHP
实现获取http内容的php函数分享
2014/02/16 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php中关于换行的实例写法
2019/09/26 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
python encode和decode的妙用
2009/09/02 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Sanic框架应用部署方法详解
2018/07/18 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
在python中使用nohup命令说明
2020/04/16 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
社团成立邀请函
2014/01/08 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
搞笑车尾标语
2014/06/23 职场文书
公司租房协议书
2014/10/14 职场文书