简单明了!网关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 的组

  • /?

字符/出现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}
相关推荐
EasyGBS2 分钟前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频
程序员-Benothing14 分钟前
Vim编辑器从入门到精通:模式、快捷键、配置、插件
linux·运维·服务器
通信大模型23 分钟前
IEEE TCCN | 面向低空经济网络的Agentic AI驱动多无人机轨迹优化
网络·人工智能·无人机
m0_6464299723 分钟前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
wdfk_prog36 分钟前
LWIP教程 09:从 `tcp_slowtmr()` 到 Fast Retransmit——TCP 超时重传与重复 ACK
服务器·网络·数据库·网络协议·tcp/ip
‎ദ്ദിᵔ.˛.ᵔ₎38 分钟前
linux 进程信号 (上)
linux·服务器
亚川楼宇自控系统数据中心厂家1 小时前
IBMS 集成管理系统:如何打通楼宇自控实现建筑一体化管控
运维
15Moonlight1 小时前
Linux网络(02):Socket 编程 UDP
linux·网络·udp
迪康Defender1 小时前
终端安全审批体系设计:如何平衡安全管控与业务连续性
运维·服务器·安全·运维开发·学习方法·业界资讯·远程工作