Где кэшируется переадресация?
На сайте настроено перенаправление с динамическим формированием URL с зависимостью от местоположения посетителя.
Проблема в том, что при включении кэширования страниц сайта (через плагины WordPress) кэшируется в том числе и переадресация.
Кто сталкивался с подобной проблемой? Не могу найти информацию где кэшируется URL перенаправления.
Дополнительно:
А какой плагин используете и как сделано динамическое формирование url?
1) Проблема встречается при использовании плагина WP Rocket.
2) Динамическое формирование URL реализовано так: При загрузке страницы по IP посетителя определяется город и посетитель перенаправляется на аналогичную страницу регионального сайта на поддомене. Например: С site.ru/usluga перенаправление на moscow.site.ru/usluga, так как посетитель находится в Москве.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В вашем случае кэшируется не "URL переадресации" в отдельном месте, а HTTP-ответ страницы. Если при первом заходе страница отдала редирект
301/302на региональный поддомен, плагин кэша, CDN или браузер могут сохранить этот ответ и отдавать его следующим пользователям без повторного определения города.При WP Rocket чаще всего проблема в page cache: динамический редирект по IP выполняется до генерации страницы, а результат попадает в кэш. Для геозависимых редиректов это плохая схема, потому что HTML-кэш обычно общий для всех посетителей.
Что делать:
301для георедиректа. Используйте302или307.Пример для WordPress:
function site_geo_redirect() { if (is_admin() || wp_doing_ajax()) { return; } $target_url = site_get_geo_target_url(); if (!$target_url || $target_url === home_url(add_query_arg([], $_SERVER['REQUEST_URI'] ?? '/'))) { return; } nocache_headers(); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Pragma: no-cache'); wp_safe_redirect($target_url, 302); exit; } add_action('template_redirect', 'site_geo_redirect', 1);
Если редирект зависит от IP, нельзя безопасно кэшировать одну и ту же страницу для всех. Альтернативный вариант - не редиректить на сервере, а показывать пользователю баннер выбора города или выполнять клиентский редирект после определения региона через JS/API. Это хуже для SEO, но снижает риск отдавать московский редирект всем посетителям.
Для диагностики проверьте заголовки ответа через
curl -I: если видитеX-Rocket-Cache: HITили похожий HIT на 302-ответе, значит редирект действительно попал в кэш.