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 相关文章推荐
有效的捕获JavaScript焦点的方法小结
Oct 08 Javascript
jquery创建一个ajax关键词数据搜索实现思路
Feb 26 Javascript
JS图片切换的具体方法(带缩略图版)
Nov 12 Javascript
javascript实现2048游戏示例
May 04 Javascript
很不错的两款Bootstrap Icon图标选择组件
Jan 28 Javascript
Ionic快速安装教程
Jun 03 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
Mar 03 Javascript
关于Angularjs中跨域设置白名单问题
Apr 17 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
Aug 30 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
使用vue判断当前环境是安卓还是IOS
Apr 12 Vue.js
对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容易忘记的知识点分享
2013/04/30 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
javascript globalStorage类代码
2009/06/04 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
js实现烟花特效
2020/03/02 Javascript
详解python中asyncio模块
2018/03/03 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
异步传递消息系统的作用
2016/05/01 面试题
大学生自我鉴定范文
2013/12/28 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
军人离婚协议书样本
2014/10/21 职场文书