我正在处理一些生成PCRE模式的代码,这些模式用于禁止清漆中的对象,并且有清漆问题告诉我模式无效。
这是我的代码
生成的模式之一(?i)(((^| )page\-2[^ ]*($| )))
这就是清漆告诉我的东西
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";
}
答案 0 :(得分:2)
显然,正如我在原始问题的评论中偶然发现的那样,清漆并不像正则表达式中的空间文字那样。在这种情况下,解决方案是将空格文本替换为\s
,它匹配任何空格字符,包括空格,制表符和换行符。