我想从清单中的网址中删除值,因此我可以根据网址采取不同的操作,例如:
网址:/ product / 123 / price / available。
我想将此转换为/ products?id = 123& sort = price& available = true
我还希望能够(如果可能的话)在请求标头上设置值,因此我可以执行以下操作,而不是传递URL上的所有参数:
/产品ID = 123&安培;排序=价格
我很欣赏第二个例子看起来有点奇怪,但是这样我们可以将新的params传递回我们的遗留应用程序,并确保没有新的params干扰当前的params - 我们只是通过标题读取新的params,直到我们将所有功能迁移到新平台。
我确定这是一个正则表达式的东西,但无法弄清楚如何去做。
答案 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阻止一样。
祝你好运!