Varnish VCL中的正则表达式捕获组

时间:2017-11-07 13:51:44

标签: regex varnish varnish-vcl

我的网址格式为:

http://some-site.com/api/v2/portal-name/some/webservice/call

我想要获取的数据需要

http://portal-name.com/webservices/v2/some/webservice/call

(是的,我可以重写应用程序,因此它使用其他URL,但我们目前正在测试清漆,所以现在它不能打扰。)

但是我无法在清漆VCL中正确获取URL。 api部分被空字符串替换,不用担心,但现在是portal-name。

我尝试过的事情:

if (req.url ~ ".*/(.*)/") {
  set req.http.portalhostname = re.group.0;
  set req.http.portalhostname = $1;
}

来自https://docs.fastly.com/guides/vcl/vcl-regular-expression-cheat-sheetExtracting capturing group contents in Varnish regex

是的,std已导入。

但这给了我一个

Syntax error at
('/etc/varnish/default.vcl' Line 36 Pos 35)
    set req.http.portalhostname = $1;

Symbol not found: 're.group.0' (expected type STRING_LIST):

所以:我怎么能这样做?当我解压缩portalhostname时,我应该能够简单地用regsub用空字符串替换该值,然后在“webservices”前加上我的URL完成。

我正在使用的清漆版本:varnish-4.1.8 revision d266ac5c6

1 个答案:

答案 0 :(得分:0)

可悲的是,在某些版本中,re.group似乎已被删除。类似的功能似乎可以通过几个vmod之一访问。见https://varnish-cache.org/vmods/