#php #mysql #apache #drupal #drupal-6
#php #mysql #apache #drupal #drupal-6
Вопрос:
Я хотел бы получить некоторые отзывы по этому поводу. Я не уверен, что это правильный подход.
Подробности
Я использую 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 для этого?
- Это лучший способ?
Ответ №1:
-
Чтобы настроить 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.
Комментарии:
1. Спасибо! Могу ли я установить cookie по умолчанию (скажем, «paris») в Apache, если у пользователя его нет?
2. Вы могли бы использовать Set-Cookie, который задокументирован здесь httpd.apache.org/docs/2.3/mod/mod_headers.html , но на вашем месте я бы сделал это в вашем коде.
3. Замена <cookie> именем файла cookie, значение которого вы хотели бы получить. Также меня сбила с толку обратная ссылка %1, которая работает только до последней секунды перезаписи, у меня было промежуточное правило, и я не мог заставить его работать правильно.
Ответ №2:
Существует также способ присвоить пользовательское значение по умолчанию, если файл cookie не установлен непосредственно в правилах перезаписи!
%1 всегда относится к последнему RewriteCond
вычисленному! Если файл cookie найден, второй RewriteCond
игнорируется. Если ничего не найдено, выполняется оценка второго. Все, что он делает, это присваивает значение, а затем сопоставляет это значение целиком!
RewriteEngine on
RewriteCond %{HTTP_COOKIE} cookiename=([^;] ) [OR]
RewriteCond defaultvalue (.*)
RewriteRule ^(.*)$ /mypath/%1 [L,R=302]
Вы можете добавить другие RewriteCond
проверки, но это должны быть последние две строки перед финальным RewriteRule