Получить значение URL из лака
Я хочу вычеркнуть значения из URL-адреса в лаке, чтобы я мог выполнять различные действия в зависимости от URL-адреса, например:
URL: / product / 123 / price / available.
Я хочу преобразовать это в /products? Id=123&sort=price&available=true
Я также хотел бы иметь возможность (если это возможно) устанавливать значения в заголовке запроса, поэтому вместо передачи всех параметров в URL я мог бы сделать следующее:
/ Продукты? ID = 123 & рода = цена
- с заголовком: x-show-available-only: true
Я ценю, что второй пример выглядит немного странно, но таким образом мы могли бы передавать новые параметры обратно в наше устаревшее приложение и гарантировать, что ни один из новых параметров не будет мешать текущим параметрам - мы будем просто читать новые параметры через заголовок, пока мы не перенесем все наша функциональность для нашей новой платформы.
Я уверен, что это регулярное выражение, но не могу понять, как это сделать.
1 ответ
Это НЕ проверено, но должно быть достаточно близко, чтобы вы могли настроить его правильно.
На основании вашего URL:
/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";
}
Вы можете добавить больше правил регулярных выражений, как если бы /else блоков.
Удачи!