Cookie redirect

divined

Новичок
Приветствую,

в общем вопрос сводится к 301 редиректу по значению куки, знаю что этот вопрос охватывает еще и смежные области, но надеюсь найти и на этом форуме умных людей.

Задача:

Выдавать разный контент по значению куки (не клоакинг, а мультивалютность). Вернее выдавать разный контент не проблема, проблема все это подружить с кэшированием. Т.е. при определенном значении куки редиректить на нужную страницу.
 

AmdY

Пью пиво
Команда форума
можно с помощью js на клиенте обновлять цены. тогда кеша лишнего можно не генерить.
 

divined

Новичок
да я смотрел уже в эту сторону, но помимо цен нужно еще менять формы и значения путей и адресов при поиске и фильтрации содержимого, а с этим js уже не справится.
 

divined

Новичок
например, мне нужно если у клиента в браузере стоит куки currency = en, редиректить его на страницу: misite.ru/region?currency=en&other_filters=...
 

divined

Новичок
Так же я смотрел для решения этого вопроса htacces, который более подходит для решения данного вопроса, но он игнорирует правила куки, а вернее выдает результат и редиректит из кэшированного заголовка сайта, в котором стоит значение старого редиректа. Тоже самое происходит и с nginx.


Т.е. правила отрабатывают верно, но только после того как отчистишь кэш браузера. Директивы no-cache и must-revalidate все равно приводят к кэшированию этой области в браузере.

//На сколько я помню называется - header cache
 

divined

Новичок
Могу показать на кошке: rkreal.ru

Мультивалютность работает, помимо цен на товары меняются также формы фильтрования и многие другие внутренние элементы.
Но на сайте полностью отключена система кэширования, т.к. она не обращает внимание на значения куки и выдает всегда первый вид страницы.
 

С.

Продвинутый новичок
Но на сайте полностью отключена система кэширования, т.к. она не обращает внимание на значения куки и выдает всегда первый вид страницы.
Ну так сделайте, чтоб обращала. По большому счету совершеннео непринципиально, значение прошло из $_ГЕТ или $_КУКИС. Его даже можно в $_ГЕТ искуственно подсунуть, что ваша системе кешированиья и не заметит разницы.
 

divined

Новичок
Хорошо, это уже похоже на мысль. Подскажите на каком этапе подать эту переменную в ГЕТ? Просто на некоторых сайтах я виде что есть такое решение, например в битриксе есть значение куки "нокэш", которое потом подставляется на каждой странице в виде: site.ru?NoCache=true. Мне нужно нечто подобное.

Я думаю на этапе загрузки если поместить значение из одного массива в другой обычным копированием, то ничего не изменится. Должны быть какие-то специальные грабли?

Систему кэширования переделать? Включая Варнишь и АПС - боюсь это не в моих силах.
 

С.

Продвинутый новичок
например в битриксе есть значение куки "нокэш", которое потом подставляется на каждой странице в виде: site.ru?NoCache=true. Мне нужно нечто подобное.
Вам не надо ничего подобного.
PHP:
$_GET['currency']= $_COOKIE['currency'];
А на каком этапе? Понятия не имею, какие у вас там этапы.
 

divined

Новичок
Так ничего не работает. Переменная в массиве есть, но она не обрабатывается.
 

С.

Продвинутый новичок
А если будет misite.ru/region?currency=en&other_filters=.., то тем тоже не обработается. Так что ни куки, ни редиреккт, как заявлено в теме, тут совершенно не при чем.
 

divined

Новичок
А если будет misite.ru/region?currency=en&other_filters=.., то тем тоже не обработается. Так что ни куки, ни редиреккт, как заявлено в теме, тут совершенно не при чем.
Вы сами поняли что сказали? Простите, но все системы кэширования уже давно понимают гет параметре в строке запроса и кэшируют как отдельную страницу.
 

divined

Новичок
Если вы считаете что я где-то ошибаюсь подскажите другое решение )

Нужно сделать мультивалютность, которая бы нормально работала с системами кэширования и php ускорителями.
Как систему кэширования возьмем такую систему, которая делает полное html представление текущей страницы и затем выдает эту страницу без использования php (например).
 

divined

Новичок
Может при смене валюты сбрасывать кэш текущей страницы и менять все ссылки на ней, что-бы они сразу вели на страницы с параметрами?
 

С.

Продвинутый новичок
Вы сами поняли что сказали? Простите, но все системы кэширования уже давно понимают гет параметре в строке запроса и кэшируют как отдельную страницу.
Ничего не могу сказать за все системы кэширования, но за то могу сказать за все PHP программы, возможно даже открою тайну. Гет параметры они берут не из строки запроса, а из массива $_GET. Если ваши все системы кэширования тоже PHP программы, то и они подчиняются этому правилу (если не полные дуры).
 

divined

Новичок
Проблема в том что любая система кэширования создана для ускорения производительности и она должна быть выполнена перед основным php кодом.
Уже понимаете к чему я клоню? К тому что система выдаст результат из кэша до того момента как обработается указанный вами код (

Я его проверил, он рабочий и правильный, но увы, не для моего случая. Как вариант, подскажите другой способ создания мультивалютности на сайте.
 

С.

Продвинутый новичок
Вернемся к печке. На каком языке написаны ваши все системы кеширования?
 

divined

Новичок
apc — программа, ускоряющая исполнение сценариев PHP интерпретатором путём кэширования их байткода (не знаю какой язык, точно не php)
memcache — тоже отдельная программа, которая может в оперативке держать результаты больших и сложных запросов, а так же куски шаблонов и целые страницы. (не php)
boost — модуль для Друпала, написанный на php, который сохраняет всю интерпретированную страницу в html формате и потом выдает ее при запросе с помощью правил редиректа в htacess (Apache) или правил nginx.
 
Сверху