На нашем сайте WordPress есть несколько представлений для каждой страницы и публикации в зависимости от того, используется ли конкретная строка запроса.
Например, если посетили example.com/blog-post-with-chart
(страница, которая включает диаграмму в качестве основного содержимого), вы увидите всю страницу. Навигационная панель, контент, нижний колонтитул ... все.
Однако если вы пошли в example.com/blog-post-with-chart/
? view = встроить тогда все, кроме диаграммы, будет удалено. Таким образом, вы увидите только график. Это то, как другие сайты могут встраивать наши диаграммы.
WordPress get_query_var('view')
ничего не возвращает. Я также попытался просто var_dump или print_r суперглобальный $ _GET, который также ничего не показывает.
Я заметил, что это не работает, только если "view" является первым параметром строки запроса. так что если мой URL example.com/blog-post-with-chart/
? fake = arg & view = встраивать тогда вид диаграммы будет работать должным образом.
Похоже, что Varnish не передает аргументы запроса серверу. Если я добавлю параметр запроса «nocache», то все будет работать ожидаемо. И это потому, что у меня есть правило исчезновения:
if (req.url ~ "nocache") {
set req.backend = default;
return(pass);
}
В качестве обходного пути я добавил новое правило для обхода кеша, если URL-адрес содержит view =
if ( req.url ~ "view=" ) {
set req.backend = default;
return(pass);
}
Но как мне помешать Varnish "отбрасывать" аргументы запроса? Мы определенно хотим, чтобы эта страница была кэширована, и мы также хотим, чтобы она была кэширована вместе со строкой запроса, чтобы встроенное представление всегда кэшировалось.
EDIT - вот файл VCL, который я использую: https://gist.github.com/kyle-jennings/589e513808fa83b93a27d1cf3c10c642
Вы в основном просите varnish очистить каждый аргумент запроса, если в начале строки запроса есть "представление":
if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
set req.url = regsub(req.url, "\?.*$", "");
}
Итак ... это соответствует