在使用varnish映射URL时传递查询字符串

时间:2016-07-04 20:43:30

标签: varnish varnish-vcl

对于我正在处理的网络服务,我们使用清漆来映射"用户友好"页面实际所在的较长URL的URL。例如:

真实网址:https://example.com/stuff/things/page.php

用户友好型网址:https://example.com/page

因此,我们在vcl中实现这一目标的方式如下:

if (req.url ~ "page") {
    set req.url = stuff/things/page.php
}

但是现在我遇到了一个问题,在这个问题中,查询字符串在这个过程中被消灭了。因此,https://example.com/page?username=Ataraxia的效果只会映射到https://example.com/stuff/things/page.php,但我需要将查询字符串传递给映射的URL。有谁知道如何通过清漆实现这一目标?我以为我需要通过正则表达式操作提取查询字符串并将其附加到映射的URL,但我是vcl的新手并不确定这是否可行,或者是否&# 39;更好的方法。

2 个答案:

答案 0 :(得分:1)

我没有测试它,但这可能会起作用:

if (req.url ~ "page") {
    set req.url = "/stuff/things/page.php" + regsub(req.url, "[^?]*", "");
}

答案 1 :(得分:1)

这就是我所做的,并且像魅力一样,我知道这是2年后的回应,但可能对某人有帮助。

if (req.url ~ "page") {
   set req.url = regsub(req.url, "page", "stuff/things/page.php\1");
}