检查cookie并使用Apache重定向

时间:2011-05-16 18:14:09

标签: php mysql apache drupal drupal-6

我很想得到一些反馈。我不确定这是不是正确的做法。

详情

我正在使用PHP 5.3 / MySQL 4运行Apache 2,Drupal 6就是平台。

我正在开发一个网站,其中包含几个选定城市的餐厅评论。 当用户到达现场时,可以选择他们的城市。我将他们的选择存储在cookie中,如果他们没有做出选择,我选择了一个默认城市。

建议的解决方案

现在,我希望网址mydomain.com/reviews根据城市选择重定向到特定于城市的网址。例如mydomain.com/reviews/paris如果我选择巴黎作为我的城市。 (如果没有设置cookie,它应该重定向到默认城市。)

我认为这是最好的选择,因为我希望用户能够在不改变城市的情况下查看其他城市的评论。如果他们想查看伦敦餐厅的评论,可以直接访问mydomain.com/reviews/london。

为了获得最佳性能,我正在考虑让Apache检查cookie并在用户访问mydomain.com/reviews时重定向到正确的城市。

所以这是我的问题......

  1. 如何配置Apache来执行此操作?
  2. 这是最好的方式吗?

3 个答案:

答案 0 :(得分:5)

  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中,所以我认为这是一个好兆头,因为它们有大量的流量并且看起来效果很好。

  3. 使用Apache进行重定向有利有弊,但主要的是,在代码中而不是在服务器上维护重写规则更容易。您可以快速进行修复和部署,而无需更改和重新启动所有Apache服务器。

答案 1 :(得分:0)

如果在重写规则中没有直接设置cookie,还有一种方法可以提供自定义默认值!

%1总是指最后评估的RewriteCond! 如果找到cookie,则忽略第二个RewriteCond。 如果没有找到,则评估第二个。它只是给出一个值,然后匹配这整个值!

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

您可以添加其他RewriteCond支票,但这必须是最终RewriteRule之前的最后两行

答案 2 :(得分:-1)

<?php
    $city = $_COOKIE['city'];

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

您无需配置Apache。