我很想得到一些反馈。我不确定这是不是正确的做法。
详情
我正在使用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时重定向到正确的城市。
所以这是我的问题......
答案 0 :(得分:5)
要配置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 :(得分: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。