У меня есть сайт Drupal, на котором используется Varnish. Я пытаюсь перенаправить людей, которые приходят на URL, начинающийся с /node
когда они просматривают сайт через Varnish.
Я пробовал следующее в файле .htaccess, но он дает 500 ошибок.
RewriteCond% {HTTP: Via} = 1.1 лак
RewriteRule ^ node / [R = 301, NC, L]
Я не смог найти что-либо с помощью Google в отношении того, как настроить таргетинг на раздел «Через» заголовка.
Привет, Пол
Поскольку Varnish не предназначен для этого, вы должны использовать для этого небольшой трюк.
Для отправки HTTP-перенаправления лучше всего подготовить конкретный обработчик ошибок и поднять этот обработчик ошибок в зависимости от ваших требований.
Шаг 1) Подготовьте обработчик ошибок для отправки перенаправления
sub vcl_error {
...
# redirect
if (obj.status == 750) {
set obj.status = 301;
set obj.http.Location = "http://www.error-location.com/";
return (deliver);
}
...
}
Шаг 2) Поднимите подготовленный обработчик ошибок
sub vcl_recv {
...
# raise error if someone requests /node
if (req.url ~ "^/node") {
error 750;
}
...
}
В качестве альтернативы вы можете настроить обработчик ошибок для использования динамической цели
sub vcl_error {
...
# redirect to dynamic target
if (obj.status == 750) {
set obj.status = 301;
set obj.http.Location = obj.response;
return (deliver);
}
...
}
...
sub vcl_recv {
...
# redirect, if someone requests /node
if (req.url ~ "^/node") {
error 750 "http://www.error-location.com/";
}
...
}
У меня здесь нет Varnish для тестирования, но мне кажется, что вы не избегаете простого текста в своем RewriteCond. Шаблон всегда считается регулярным выражением, поэтому пробелы и точки имеют особое значение. Пытаться:
RewriteCond %{HTTP:Via} =1\.1\ varnish
RewriteRule ^node / [R=301,NC,L]
Кстати, это немного запутанный способ делать что-то. Обычно вы проверяете заголовок X-Forwarded-By, чтобы определить, находитесь ли вы за прокси-сервером. Поскольку они могут быть подделаны и / или добавлены вышестоящими прокси, вам следует либо: