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 单击li防止重复加载的实现代码
Dec 24 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
Jquery实现图片预加载与延时加载的方法
Dec 22 Javascript
JavaScript中的原型prototype属性使用详解
Jun 05 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
JS实现字符串转驼峰格式的方法
Dec 16 Javascript
Angular2使用Augury来调试Angular2程序
May 21 Javascript
Vue.directive使用注意(小结)
Aug 31 Javascript
vue根据进入的路由进行原路返回的方法
Sep 26 Javascript
详解如何使用router-link对象方式传递参数?
May 02 Javascript
Vue3.0的优化总结
Oct 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里的JS打印函数
2006/10/09 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
python 获取字符串MD5值方法
2018/05/29 Python
Django开发中的日志输出的方法
2018/07/02 Python
python制作mysql数据迁移脚本
2019/01/01 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
幼儿园运动会入场词
2014/02/10 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
合伙协议书
2014/04/23 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
自荐信模板大全
2015/03/27 职场文书
手机销售员岗位职责
2015/04/11 职场文书
python高温预警数据获取实例
2022/07/23 Python