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