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 相关文章推荐
Prototype最新版(1.5 rc2)使用指南(1)
Jan 10 Javascript
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
Feb 23 Javascript
javascript 二维数组的实现与应用
Mar 16 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
May 16 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
mui back 返回刷新页面的实例
Dec 06 Javascript
vue-prop父组件向子组件进行传值的方法
Mar 01 Javascript
node的process以及child_process模块学习笔记
Mar 06 Javascript
angularjs通过过滤器返回超链接的方法
Oct 26 Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 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
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
幼儿园实习生辞职信
2014/01/20 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
班级入场式解说词
2014/02/01 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android