Проверьте куки и перенаправьте с Apache - PullRequest
4 голосов
/ 16 мая 2011

Я бы хотел получить отзыв об этом.Я не уверен, что это правильный подход.

Подробности

Я использую 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. Это лучший путь?

Ответы [ 3 ]

5 голосов
/ 16 мая 2011
  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.

0 голосов
/ 13 января 2015

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

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

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

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

0 голосов
/ 16 мая 2011
<?php
    $city = $_COOKIE['city'];

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

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

...