Проверьте файлы 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 .

Итак, вот мои вопросы...

  1. Как мне настроить Apache для этого?
  2. Это лучший способ уйти?
Author: Per Sandström, 2011-05-16

3 answers

  1. Чтобы настроить Apache для этого, используйте следующее, заменив имя файла cookie.

    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^/reviews/?$
    RewriteCond %{HTTP_COOKIE} <cookie>=([^;]+)
    RewriteRule .* http://mydomain.com/reviews/%1 [R=302,L]
    
  2. Yelp сохраняет местоположение в файле cookie, поэтому я бы счел это хорошим знаком, поскольку у них много трафика и, похоже, дела идут хорошо.

Есть плюсы и минусы использования Apache для перенаправления, но главный недостаток заключается в том, что проще поддерживать правило перезаписи в вашем коде, а не на сервере. Вы можете быстро вносить исправления и развертывать, вместо того, чтобы менять и перезапускать все серверы Apache.

 4
Author: toneplex, 2011-05-16 18:56:33
<?php
    $city = $_COOKIE['city'];

    header("Location: mydomain.com/reviews/".$city);
?>

Вам не нужно настраивать Apache.

 0
Author: thinklinux, 2011-05-16 18:29:42

Существует также способ задать пользовательское значение по умолчанию, если файл cookie не установлен непосредственно в правилах перезаписи!

%1 всегда относится к последнему RewriteCond оцененному! Если файл cookie найден, второй RewriteCond игнорируется. Если ничего не найдено, оценивается второй. Все, что он делает, - это дает значение, а затем сопоставляет все это значение!

RewriteEngine on
RewriteCond %{HTTP_COOKIE} cookiename=([^;]+) [OR]
RewriteCond defaultvalue (.*)
RewriteRule ^(.*)$ /mypath/%1 [L,R=302]

Вы можете добавить другие проверки RewriteCond, но это должны быть последние две строки перед окончательной RewriteRule

 0
Author: Josef, 2015-01-13 09:36:21