从清漆中获取url值

时间:2013-03-02 13:14:11

标签: regex url rest varnish legacy

我想从清单中的网址中删除值,因此我可以根据网址采取不同的操作,例如:

网址:/ product / 123 / price / available。

我想将此转换为/ products?id = 123& sort = price& available = true

我还希望能够(如果可能的话)在请求标头上设置值,因此我可以执行以下操作,而不是传递URL上的所有参数:

/产品ID = 123&安培;排序=价格

  • 标题: x-show-available-only:true

我很欣赏第二个例子看起来有点奇怪,但是这样我们可以将新的params传递回我们的遗留应用程序,并确保没有新的params干扰当前的params - 我们只是通过标题读取新的params,直到我们将所有功能迁移到新平台。

我确定这是一个正则表达式的东西,但无法弄清楚如何去做。

1 个答案:

答案 0 :(得分:3)

这是未经过测试的,但应该足够接近,你可以调整它以使其正确。

根据您的网址:

/product/123/price/available

您需要指定两个后端(更改您自己的IP):

backend old_app {
    .host = "127.0.0.1";
    .port = "80";
}

backend new_app {
    .host = "127.0.0.2";
    .port = "80";
}

vcl_recv中的代码:

if (req.url ~ "^/product/") {
    set req.url = regsub(req.url, "/product/([0-9]/)/([a-zA-Z])", "/products?id=\1&sort=\2");
    set req.backend = old_app;
} else {
    set req.backend = new_app.
}

if (req.url ~ "/available") {
    set req.http.x-show-available-only = "true";
}

您可以添加更多正则表达式规则,就像if / else阻止一样。

祝你好运!