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 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
JSON 客户端和服务器端的格式转换
Aug 27 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
Nov 19 Javascript
jQuery对Select的操作大集合(收藏)
Dec 28 Javascript
Javascript排序算法之计数排序的实例
Apr 05 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
Jun 30 Javascript
解决Mac node版本升级失败的问题
May 16 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
Aug 10 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 Javascript
vue实现下拉加载其实没那么复杂
Aug 13 Javascript
React中使用UMEditor的方法示例
Dec 27 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
Zerg建筑一览
2020/03/14 星际争霸
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Python selenium 三种等待方式解读
2016/09/15 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
岗位职责范本
2013/11/23 职场文书
婚庆司仪主持词
2014/03/15 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
通知函格式范文
2015/04/27 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
python中redis包操作数据库的教程
2022/04/19 Python