1

我想从清漆中的 url 中去除值,因此我可以根据 url 采取不同的操作,例如:

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

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

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

/products?id=123&sort=price

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

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

我确定这是正则表达式的事情,但不知道该怎么做。

4

1 回答 1

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 块。

祝你好运!

于 2013-03-03T20:54:34.747 回答