我想避免在同一页面上缓存,具体取决于cookie值(我的用户的个人资料中包含/ firstname-lastname这样的网址,并且可以访问其他用户的个人资料)。
在我的cookie中,我存储了“firstname-lastname”值,并尝试对其进行测试。 所以我做了这个:
set req.http.X-SLUG = regsub(req.http.cookie, ".*user_slug=([^;]+);.*", "\1");
if (req.url ~ "^/" + req.http.X-SLUG) {
这里是编译错误:
Expected ')' got '+' (program line 73), at ('conf.vcl' Line 50 Pos 28)
if (req.url ~ "^/" + req.http.X-SLUG) {
---------------------------#-------------------
你知道怎么做吗?
由于
答案 0 :(得分:0)
在varnish中,所有正则表达式都是在首次加载配置时编译的,因此必须是静态字符串。
解决此限制的一种方法是使用regsub
调用来提取您感兴趣的URL部分,然后测试相等性:
set req.http.X-SLUG = regsub(req.http.cookie, ".*user_slug=([^;]+).*", "\1");
set req.http.X-TMP-URL = regsub(req.url, "^/(.*)$", "\1");
if (req.http.X-SLUG == req.http.X-TMP-URL) {
....
}
remove req.http.X-TMP-URL;
注意,在上面的示例中,我从X-SLUG正则表达式中删除了;
。即使user_slug是列表中的最后一个cookie,这也允许正则表达式工作。