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之典型高阶函数应用介绍二
Jan 10 Javascript
javascript 日期时间 转换的方法
Feb 21 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
使用JavaScript的AngularJS库编写hello world的方法
Jun 23 Javascript
原生javascript实现匀速运动动画效果
Feb 26 Javascript
详解PHP中pathinfo()函数导致的安全问题
Jan 05 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
Jan 19 Javascript
JS运动特效之同时运动实现方法分析
Jan 24 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
小程序api实现promise封装过程解析
Nov 21 Javascript
javascript设计模式之迭代器模式
Jan 30 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 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 array_merge函数
2014/08/31 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
Python subprocess模块学习总结
2014/03/13 Python
python中黄金分割法实现方法
2015/05/06 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python解析含有重复key的json方法
2019/01/22 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
HTML5新标签兼容——> 的两种方法
2018/09/12 HTML / CSS
C#可否对内存进行直接的操作
2015/02/26 面试题
一道Delphi面试题
2016/10/28 面试题
优秀教师感人事迹材料
2014/05/04 职场文书
体育之星事迹材料
2014/05/11 职场文书
2014年师德承诺书
2014/05/23 职场文书
政府采购方案
2014/06/12 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL