![Varnish - VCL 中 URL 非拉丁字符的使用](https://linux22.com/image/735976/Varnish%20-%20VCL%20%E4%B8%AD%20URL%20%E9%9D%9E%E6%8B%89%E4%B8%81%E5%AD%97%E7%AC%A6%E7%9A%84%E4%BD%BF%E7%94%A8.png)
我有一个客户,需要在他的服务器上安装 Varnish。他说俄语,有一个在线商店,其 URL 如下,需要将其从缓存中排除(корзина
即购物车页面)。
www.example.com/корзина/
那么,在 VCL 中是否有任何使用非拉丁字符的特殊方法,因为它似乎对我来说不起作用。我尝试了以下方法(实际代码比这更长,并且适用于其他网页,这只是向您展示一个例子):
if (
! req.url ~ "(...|корзина/|...)"
# or URLencoded:
! req.url ~ "(...|%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B0/|...)"
)
{ unset req.http.cookie; }
不知为何,这两种方法似乎都对我不起作用 - 我的规则没有被触发。那么,我应该如何在 VCL 中使用非拉丁字符?
答案1
URL 中的非拉丁字符必须编码且小写:
tr "[A-Z]" "[a-z]" < <(php -r 'echo( urlencode("корзина") . PHP_EOL );')
因此这将起作用:
req.url ~ "(...|%d0%ba%d0%be%d1%80%d0%b7%d0%b8%d0%bd%d0%b0|...)" ...
这不会:
req.url ~ "(...|%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B0/|...)" ...
req.url ~ "(...|корзина/|...)" ...