У меня есть относительно простой (как мне кажется) вариант использования, но я не могу найти примеров, когда кто-то это делал. Мы используем Varnish в качестве кеша и обратного прокси-сервера перед двумя разными приложениями и хотели бы сделать вещи более унифицированными для обоих, поскольку они оба делают похожие вещи. Я надеялся, что Varnish поможет переписать URL-адреса, как показано ниже.
Исходный URL приложения для пагинации (получить первые 10 элементов):
//myapplication.com/products/?startindex=1&endindex=10 Желаемый URL:
//myapplication.com/products/?paginate=1:10 Это всего лишь один пример (самый сложный, поскольку он объединяет два параметра), но во всех случаях входные значения для параметров остаются неизменными, просто параметр имена изменятся.
Другой пример:
//myapplication.com/search/?query=something для:
//myapplication.com/search/?q=something Есть ли у кого-нибудь опыт работы с лаком и как это можно сделать?
Спасибо
Если вы хотите внутренне переписать URL-адреса, поместите следующее (непроверенное) в vcl_recv:
set req.url = regsub(
req.url,
"^/products/.*([&?]startindex=([0-9]+)|[&?]endindex=([0-9]+))*",
"/products/?paginate=\2:\3"
);
Если вы хотите отправить 301 запрос от одного стиля URL к другому, это немного сложнее, но вот примерное начало того, как вы можете это сделать:
vcl_recv:
set req.http.X-Redirect-URL = regsub(
req.url,
"^/products/.*([&?]startindex=([0-9]+)|[&?]endindex=([0-9]+))*",
"/products/?paginate=\2:\3"
);
error 700 req.http.X-Redirect-URL;
vcl_error:
if (obj.status == 700) {
set obj.http.Location = obj.response;
set obj.status = 301;
set obj.response = "Moved Permanently";
}
Очевидно, что если у вас есть другие параметры, вам придется перепрыгнуть через еще несколько обручей, чтобы убедиться, что они правильно переданы.