简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析

问题背景:

前端需要发送一个这样的请求,但出现404

首先解析请求的变化:

http://www.51xuecheng.cn/api/checkcode/pic

1.请求先打在nginx,www.51xuecheng.cn/api/checkcode/pic 部分匹配到了之后会转发给网关进行处理变成localhost:63010/checkcode/pic

2.然后再转发到网关上,网关上的路由转发配置如下图。然后localhost:63010/checkcode/pic 来到网关之后,发现符合/checkcode开头的请求,因此就转发拼接给uri中的去处理(此处为lb://checkcode。因此就变成localhost:63075/pic

但我们是需要localhost:63075/checkcode/pic才能把请求发送到对应服务。因此就要进行路由重写

这样的请求是能成功的

官网案例:

  • RewritePath=/red(?<segment>/?.*), $\{segment}

    spring:
    cloud:
    gateway:
    routes:
    - id: rewritepath_route
    uri: https://example.org
    predicates:
    - Path=/red/**
    filters:
    - RewritePath=/red(?<segment>/?.*), ${segment}

正则表达式解析:

命名分组:(?<segment>/?.*)

这一部分是将后面匹配的字符串捕获到一个名为segment的组中,如这个案例中就是将**/?.***这部分自定义的捕获到segment中

  • ?<segment>

名称为 segment 的组

  • /?

字符/出现0次或1次

  • .*

任意字符出现0次或多次

引用捕获文本:$\{segment}

将前面名为 segment 的组捕获到的字符串移动到此。
**注意:**此处\的出现是避免 yaml 认为这是一个变量${segment}

实例:

此处的路由意思就是去掉/checkcode/,并捕获后面的字符串,然后用/xxxx代替去掉的部分,再拼接捕获的部分。

localhost:63075/checkcode/pic --> localhost:63075/xxxx/pic

- id: checkcode
          uri: lb://checkcode
          predicates:
            - Path=/checkcode/**
          filters:
            - RewritePath=/checkcode/?(?<segment>.*), /xxxx/$\{segment}
相关推荐
可儿·四系桜2 分钟前
如何在多台Linux虚拟机上安装和配置Zookeeper集群
linux·服务器·zookeeper
Flying_Fish_roe6 分钟前
linux-软件包管理-包管理工具(Debian 系)
linux·运维·debian
BLEACH-heiqiyihu32 分钟前
红帽9中nginx-源码编译php
运维·nginx·php
666786661 小时前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
企业管理8MSaaS1 小时前
了解CRM销售自动化:类型、优势、策略和工具
运维·自动化
pemper_1 小时前
怎么操作使http变成https访问?
网络·网络协议·http·https·ssl
蒙奇·D·路飞-1 小时前
古诗词四首鉴赏
网络
宇宙第一小趴菜1 小时前
虚拟机安装xubuntu
linux·服务器·vmware
创小董2 小时前
智能机巢+无人机:自动化巡检技术详解
运维·自动化·无人机
henanxiaoman2 小时前
SaltStack自动化运维部署
运维·自动化·saltstack