Проверьте файлы cookie и перенаправьте их с помощью Apache
Я бы хотел получить некоторые отзывы по этому поводу. Я не уверен, что это правильный подход.
Подробности
Я использую Apache 2 с PHP 5.3/MySQL 4, а платформой является Drupal 6.
Я разрабатываю сайт, который содержит обзоры ресторанов в нескольких выбранных городах. Когда пользователи приходят на сайт, он может выбрать, какой город принадлежит им. Я сохраняю их выбор в файле cookie, и если они не сделали выбор, я выбрал значение по умолчанию город.
Предлагаемое решение
Теперь мне нужен URL-адрес mydomain.com/reviews для перенаправления на конкретный URL-адрес в зависимости от выбранного города. Например mydomain.com/reviews/paris если я выбрал Париж в качестве своего города. (Если нет набора файлов cookie, он должен перенаправляться в город по умолчанию.)
Я считаю это лучшей альтернативой, потому что я хочу, чтобы пользователь мог просматривать отзывы в другом городе, не меняя свой город. Если они хотят просмотреть отзывы о лондонском ресторане они могут просто пойти в mydomain.com/reviews/london .
Для лучшей производительности я подумываю о том, чтобы Apache проверил файл cookie и сделал перенаправление в нужный город, когда пользователь отправится в mydomain.com/reviews .
Итак, вот мои вопросы...
- Как мне настроить Apache для этого?
- Это лучший способ уйти?
3 answers
-
Чтобы настроить Apache для этого, используйте следующее, заменив имя файла cookie.
RewriteEngine on RewriteCond %{REQUEST_URI} ^/reviews/?$ RewriteCond %{HTTP_COOKIE} <cookie>=([^;]+) RewriteRule .* http://mydomain.com/reviews/%1 [R=302,L]
Yelp сохраняет местоположение в файле cookie, поэтому я бы счел это хорошим знаком, поскольку у них много трафика и, похоже, дела идут хорошо.
Есть плюсы и минусы использования Apache для перенаправления, но главный недостаток заключается в том, что проще поддерживать правило перезаписи в вашем коде, а не на сервере. Вы можете быстро вносить исправления и развертывать, вместо того, чтобы менять и перезапускать все серверы Apache.
<?php
$city = $_COOKIE['city'];
header("Location: mydomain.com/reviews/".$city);
?>
Вам не нужно настраивать Apache.
Существует также способ задать пользовательское значение по умолчанию, если файл cookie не установлен непосредственно в правилах перезаписи!
%1 всегда относится к последнему RewriteCond
оцененному!
Если файл cookie найден, второй RewriteCond
игнорируется.
Если ничего не найдено, оценивается второй. Все, что он делает, - это дает значение, а затем сопоставляет все это значение!
RewriteEngine on
RewriteCond %{HTTP_COOKIE} cookiename=([^;]+) [OR]
RewriteCond defaultvalue (.*)
RewriteRule ^(.*)$ /mypath/%1 [L,R=302]
Вы можете добавить другие проверки RewriteCond
, но это должны быть последние две строки перед окончательной RewriteRule