经过不断测试,得出如下测试结果:
配置方案1:测试失败
报错:(502 Bad Gateway)The page is temporarily unavailable
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- StripPrefix=4
- RewritePath=/?(?<segment>.*) /nosAdmin/external/vehicleOrder/${segment}
配置方案2:测试失败
报错:禁止访问资源
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- StripPrefix=4
- RewritePath=/?(?<segment>.*), /nosAdmin/external/vehicleOrder/${segment}
配置方案3:测试失败
报错:禁止访问资源
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- StripPrefix=4
- RewritePath=/?(?<segment>.*), /nosAdmin/external/vehicleOrder/$\{segment}
配置方案4:测试失败
报错:(502 Bad Gateway)The page is temporarily unavailable
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- StripPrefix=3
- RewritePath=/order/?(?<segment>.*) /nosAdmin/external/vehicleOrder/${segment}
配置方案5:测试成功
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- StripPrefix=3
- RewritePath=/order/?(?<segment>.*), /nosAdmin/external/vehicleOrder/${segment}
配置方案6:测试成功
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- StripPrefix=3
- RewritePath=/order/?(?<segment>.*), /nosAdmin/external/vehicleOrder/$\{segment}
配置方案7:测试失败
报错:(502 Bad Gateway)The page is temporarily unavailable
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- RewritePath=/im/v1.0/service/order/?(?<segment>.*) /nosAdmin/external/vehicleOrder/$\{segment}
配置方案8:测试成功
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- RewritePath=/im/v1.0/service/order/?(?<segment>.*), /nosAdmin/external/vehicleOrder/$\{segment}
配置方案9:测试成功
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: nos-web-service-rwlb
uri: lb://nos-web-service
predicates:
- Path=/im/v1.0/service/order/queryOrderDetail
filters:
- RewritePath=/im/v1.0/service/order/queryOrderDetail, /nosAdmin/external/vehicleOrder/queryOrderDetail
官网案例(Spring Cloud Gateway 4.0.9)

结论
- 实践证明,RewritePath中2个路径之间必须加“逗号”
- 实践证明,$ 可以不用替换成 $\,但建议按照官网要求使用 $\
- 推荐使用配置方案5、6、8,优先级6>=8>5。这两个方案,可以对predicates中的Path进行正则匹配,也符合了真实应用场景