2014-02-06 56 views
0

我想避免緩存在同一頁取決於cookie值(我的用戶有配置文件與URL/firstname-lastname,並可以訪問其他用戶的配置文件)。光油:VCL〜與req值

在我的cookies中,我存儲了「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) { 
---------------------------#------------------- 

你knon如何做到這一點?

由於

回答

0

在清漆中,當第一次加載的構造正則表達式的所有被編譯的,因此必須是靜態字符串。要解決此限制

一種方法是使用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,這也允許正則表達式工作。

+0

完美!不知道正則表達式是在第一次加載時編譯的。謝謝 – Bacteries