Vue路由history模式解决404问题的几种方法


Posted in Javascript onSeptember 29, 2018

问题背景:

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、 (vue.js官方教程里提到的https://router.vuejs.org/zh-cn/essentials/history-mode.html)

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 相关文章推荐
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
Mar 18 Javascript
jquery select 设置默认选中的示例代码
Feb 07 Javascript
使表格的标题列可左右拉伸jquery插件封装
Nov 24 Javascript
JScript中的条件注释详解
Apr 24 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
Sep 04 Javascript
vue实现简单loading进度条
Jun 06 Javascript
vue-router history模式下的微信分享小结
Jul 05 Javascript
Javascript之高级数组API的使用实例
Mar 08 Javascript
vue 解决异步数据更新问题
Oct 29 Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 Javascript
JS轮播图的实现方法
Aug 24 Javascript
对vue v-if v-else-if v-else 的简单使用详解
Sep 29 #Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
Sep 29 #Javascript
浅谈针对Vue相同路由不同参数的刷新问题
Sep 29 #Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 #Javascript
详解React之key的使用和实践
Sep 29 #Javascript
vue给组件传递不同的值方法
Sep 29 #Javascript
vue动画之点击按钮往上渐渐显示出来的实例
Sep 29 #Javascript
You might like
文章推荐系统(三)
2006/10/09 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python星号*与**用法分析
2018/02/02 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
python 求定积分和不定积分示例
2019/11/20 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
即兴演讲稿
2014/01/04 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
新店开张活动方案
2014/08/24 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
公务员考察材料
2014/12/23 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python