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 13 Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
Aug 24 Javascript
原生js实现淘宝购物车功能
Jun 23 Javascript
js 性能优化之快速响应的用户界面
Feb 15 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
Apr 11 Javascript
Angular2自定义分页组件
Apr 19 Javascript
Vue实现todolist删除功能
Jun 26 Javascript
详解三种方式解决vue中v-html元素中标签样式
Nov 22 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 Javascript
JavaScript TAB栏切换效果的示例
Nov 05 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
php密码生成类实例
2014/09/24 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python数据正态性检验实现过程
2020/04/18 Python
使用python-Jenkins批量创建及修改jobs操作
2020/05/12 Python
什么是Python中的顺序表
2020/06/02 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
Java语言程序设计测试题选择题部分
2014/04/03 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
招商银行工作证明
2015/06/17 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python