Spring Cloud Gateway RewritePath路径重写访问/my/**返回404问题排查
问题根因
- 路由匹配规则错误:当前路由的
Path谓词配置为/services/**,仅匹配/services开头的请求,你需要拦截的/my/**开头请求根本无法进入该路由,所以直接返回404 - 路径重写规则不符合预期:原有RewritePath规则会将
/my/xxx重写为/xxx?d=json,缺少你需要的/services前缀,就算请求能进入路由也会转发到后端错误路径。
修正后的配置
server.port= 8888 spring.application.name=my-api spring.cloud.gateway.routes[0].id = my-api spring.cloud.gateway.routes[0].uri = https://my-api.com # 修改谓词匹配/my/**开头的GET请求 spring.cloud.gateway.routes[0].predicates[0]=Path=/my/** spring.cloud.gateway.routes[0].predicates[1]=Method=GET # 重写规则:把/my/xxx转为/services/xxx,同时追加固定查询参数 spring.cloud.gateway.routes[0].filters[0]=RewritePath=/my/(?<segment>.*), /services/$\{segment}?d=json
可选优化(更清晰的参数追加方式)
如果不想把查询参数写在RewritePath规则里,可以拆分重写路径和加参数两个过滤器,逻辑更清晰,也避免特殊字符转义问题:
spring.cloud.gateway.routes[0].filters[0]=RewritePath=/my/(?<segment>.*), /services/$\{segment} spring.cloud.gateway.routes[0].filters[1]=AddRequestParameter=d, json
内容的提问来源于stack exchange,提问作者Febrari Supaldi
相关产品推荐
相关产品推荐

