【发布时间】:2014-09-17 10:59:19
【问题描述】:
我正在编写一些生成 PCRE 模式的代码,这些模式用于禁止 varnish 中的对象,并且遇到 varnish 的问题,告诉我该模式无效。
这是我的代码生成的模式之一
(?i)(((^| )page\-2[^ ]*($| )))
这就是varnish告诉我的
0 Debug - "REGEX: <missing )>"
13 RxRequest c BAN
13 RxURL c /
13 RxProtocol c HTTP/1.1
13 RxHeader c User-Agent: curl/7.34.0
13 RxHeader c Accept: */*
13 RxHeader c Host: www.test.local
13 RxHeader c X-Tags: (?i)(((^| )page\-2[^ ]*($| )))
我什至尝试在测试过程中简化模式
page-2[^ ]
page\-2[^ ]
我明白了
0 Debug - "REGEX: <missing terminating ] for character class>"
这样的简单模式有效
page-2.*
我正在运行varnish-3.0.2 revision cbf1284
相关的VCL是
if (req.request == "BAN") {
ban("obj.http.X-Tags ~ " + req.http.X-Tags);
error 200 "Banned";
}
【问题讨论】:
-
它可能不喜欢空格字面量。尝试用
\s替换空格? -
您应该将此作为答案,因为它是问题/解决方案。不知道为什么它不喜欢空格。
-
我已将其发布为答案。我什至想到这一点的唯一原因是因为 flex 也不喜欢空格文字。
-
看来
\x20也有效
标签: regex varnish varnish-vcl