我正在编写一些生成 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 修订版 cbf1284
相关的VCL是
if (req.request == "BAN") {
ban("obj.http.X-Tags ~ " + req.http.X-Tags);
error 200 "Banned";
}
最佳答案
显然,正如我在对原始问题的评论中意外发现的那样, Varnish 不喜欢正则表达式中的空格文字。这种情况下的解决方案是用 \s
替换空格文字,它匹配任何空白字符,包括空格、制表符和换行符。
关于regex - Varnish 3 没有正确解析正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24958265/