首页 > 解决方案 > HaProxy 路径正则表达式未按预期工作

问题描述

使用以下网址,我需要使用后端 A

/yyy/some-name/zzz/some-other-name
/yyy/some-name/zzz/some-other-name/1
/yyy/some-name/zzz/some-other-name/2
/yyy/some-name/zzz/some-other-name/3
/yyy/some-name/zzz/some-other-name/4

并使用这些网址后端 B

/old/yyy/some-name/zzz/some-other-name
    /yyy/some-name/zzz/some-other-name/1?param=test
    /yyy/some-name/zzz/some-other-name/2?param=test

我正在使用以下规则

acl rule_a path_reg -i ^\/yyy\/.+\/zzz\/([a-z]|-|[0-9])*($|\/[1-4])$
use_backend backend_a if rule_a

default_backend backend_b

您可以在这里试用正则表达式

问题是,上面提到的所有url 都会去后端 A,但我希望包含查询参数的那些去后端 B。

标签: regexaclhaproxy

解决方案


我认为你需要一个url_reg。像这样尝试(我已经简化了模式)

acl rule_a url_reg -i ^\/yyy\/.+\/zzz\/([a-z0-9-])+($|\/[1-4]$)
use_backend backend_a if rule_a    

推荐阅读