首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HAPROXY规则匹配'?‘发问标记

HAPROXY规则匹配'?‘发问标记
EN

Server Fault用户
提问于 2020-11-25 07:43:03
回答 1查看 1.4K关注 0票数 0

在HAproxy中,用一些数据替换传入的url。这是传入的路径:

代码语言:javascript
复制
/powerbi?redirectSuccessUrl=/reports

我想要匹配:

代码语言:javascript
复制
/powerbi? 

代之以

代码语言:javascript
复制
clientId=${clientId}&

最后的结果必须是:

代码语言:javascript
复制
/powerbi?clientId=${clientId}&redirectSuccessUrl=/reports

我试过这个

代码语言:javascript
复制
http-request set-path %[path, regsub(^/powerbi\?,/powerbi?clientId="${clientId}"&]

但是得到两个问号(接近powerBi和在redirectSuccessUrl之前):

代码语言:javascript
复制
/powerbi?clientId=${clientId}&?redirectSuccessUrl=/reports

如何匹配“?”跟瑞格一起?我试过“?”、“”、“”。这些都不符合问号。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-11-25 12:43:53

您不匹配?,因为在that中,它将uri的path部分与query string部分分离开来,而haproxy已经为您做到了这一点。您希望更改查询字符串,但更改路径。这就是为什么您的更改最终出现在?的错误方面。相反,使用http-request set-query,如下所示:

代码语言:javascript
复制
http-request set-query clientId=${clientId}&%[query]

如果您可能希望根据原始uri是否有查询正确地设置查询,您可以尝试如下:

代码语言:javascript
复制
http-request set-query clientId=${clientId}&%[query] if { query -m found }
http-request set-query clientId=${clientId} unless { query -m found }

这避免了在uri中没有查询字符串时尾随&

或者,您可以使用set-uri尝试一些神奇的regexp并设置整个uri,但是要非常小心,请记住uri可能以relative uri (例如/foobar?arg1=val1&arg2=val2)或absolute uri (例如https://example.com:6789/foobar?arg1=val1&arg2=val2)的形式出现,然后使用适当的regexp来处理这两种情况要比像上面这样简单地使用set-pathset-query要困难得多。关于haproxy文档中相对和绝对uri的更多信息

回应意见的最新情况

您可以匹配路径部件和更改查询字符串,例如:

代码语言:javascript
复制
acl url_powerbi path_beg /powerbi
acl query_string_found query -m found
http-request set-query clientId=${clientId}&%[query] if url_powerbi query_string_found
http-request set-query clientId=${clientId} if url_powerbi !query_string_found
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1043840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档