2012-09-19 43 views
0

我在根据位置显示项目的项目上工作。第一次用户必须选择一个位置才能搜索一个项目。这个位置被保存为cookie以供将来参考。该URL如下:添加位置作为与mod重写的url的子目录?

www.example.com/newyork 

如果用户正在寻找存在于纽约的一个项目,该项目的网址是:

www.example.com/item/iphone 

上述网址工作正常,但有一个问题。如果上述网址通过电子邮件转发给第一次使用者,则此项目不存在,因为未选择该位置。我可以将用户转发到不同的页面以选择位置,然后查找该项目,但这对用户来说很麻烦。所以,我想改变上面的网址到

www.example.com/newyork/item/iphone 

这样,我可以使用纽约作为位置。如何将一个不存在的子目录添加到一个url? Canthis用PHP完成还是用mod_rewrite完成?

+0

你可以让'www.example.com /纽约/项目/ iphone'改写为'www.example.com /项目/ iphone'但会发生什么“纽约”部分?你说它应该是在一个饼干? –

+0

好吧,“纽约”部分没有任何反应,它只是留在cookie中供将来参考。我试图做到这一点的主要原因是为了更好地服务于电子邮件链接或转发。如果链接仅提供[链接](www.example.com/item/iphone),则无法分辨用户位置(除非我将用户转发到不同的页面以选择位置)。而如果链接已经有位置[链接](www.example.com/newyork/item/iphone),那么我们可以为第一次用户提供询问位置。这种情况主要适用于转发或电子邮件链接。希望它是有道理的。 – Hari

+0

但是,如果有人从电子邮件中访问“www.example.com/newyork/item/iphone”链接,并且它会被重写以便“/ item/iphone”获得服务,那么“/ item/iphone”如何知道位置是,没有cookie,因为他们点击了电子邮件中的链接。 –

回答

0

你可以尝试做一个重定向,但你必须精心制作用于匹配/newyork/item/iphone的正则表达式。然后,您可以将newyork部分分组,并设置cookie并使用CO标志重定向浏览器。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^/]+)/item/([^/]+)$ /item/$2 [L,R,CO=location:$1:example.com:/] 

这将需要请求像http://www.example.com/pittsburgh/item/iphone并提取pittsburgh部分,将其存储在名为location饼干(与域= example.com和路径= /),则浏览器重定向所以该cookie被存储通过浏览器,使浏览器去http://www.example.com/item/iphone

documentation for the CO flag关于语法的详细信息:

[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly] 

快速的问题。没有mod_rewrite规则的acutal链接是www.example.com/item.php/itemid=phone。是否有可能把这个链接改写为www.example.com/newyork/item.php/itemid=phone

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^/]+)/item.php/itemid=(.+)$ /item.php/itemid=$2 [L,R,CO=location:$1:example.com:/] 
+0

谢谢。我会试试看。 – Hari

+0

@哈里当然,看我的编辑 –