【问题标题】:Check cookie and redirect with Apache检查 cookie 并使用 Apache 重定向
【发布时间】:2011-08-26 15:58:43
【问题描述】:

我很想就此获得一些反馈。我不确定这是否是正确的方法。

详情

我使用 PHP 5.3/MySQL 4 运行 Apache 2,平台是 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. 这是最好的方法吗?

【问题讨论】:

    标签: php mysql apache drupal drupal-6


    【解决方案1】:
    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 服务器。

    【讨论】:

    • 谢谢!如果用户没有,我可以在 Apache 中设置默认 cookie(比如“paris”)吗?
    • 您可以使用此处记录的 Set-Cookie httpd.apache.org/docs/2.3/mod/mod_headers.html,但如果我是您,我会在您的代码中使用。
    • 替换为您想要获取其值的 cookie 的名称。另外让我感到困惑的是 %1 反向引用仅适用于最后一个 RewriteCond,我在两者之间有一个规则,无法让它正常工作。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-19
      • 2017-06-21
      • 2016-08-07
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多