使用mod rewrite将位置作为子目录添加到url?
我正在处理根据位置显示项目的项目。用户第一次必须选择位置才能搜索项目。此位置保存为cookie,以供将来参考。url如下所示:使用mod rewrite将位置作为子目录添加到url?,url,mod-rewrite,subdirectory,Url,Mod Rewrite,Subdirectory,我正在处理根据位置显示项目的项目。用户第一次必须选择位置才能搜索项目。此位置保存为cookie,以供将来参考。url如下所示: www.example.com/newyork 如果用户正在查看纽约存在的项目,则该项目的url为: www.example.com/item/iphone 上面的url工作正常,但有一个问题。如果通过电子邮件将上述url转发给第一次使用此url的用户,则此项目不存在,因为未选择位置。我可以将用户转发到不同的页面以选择位置,然后查找该项目,但这对用户来说很麻烦。
www.example.com/newyork
如果用户正在查看纽约存在的项目,则该项目的url为:
www.example.com/item/iphone
上面的url工作正常,但有一个问题。如果通过电子邮件将上述url转发给第一次使用此url的用户,则此项目不存在,因为未选择位置。我可以将用户转发到不同的页面以选择位置,然后查找该项目,但这对用户来说很麻烦。所以,我想把上面的url改成
www.example.com/newyork/item/iphone
这样我就可以利用纽约作为地点。如何将不存在的子目录添加到url?这是用PHP还是用mod_rewrite完成的?您可以尝试重定向,但您必须仔细设计用于匹配
/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
并提取匹兹堡部分,将其存储在名为location
的cookie中(域=example.com,路径=/),然后重定向浏览器,使浏览器存储cookie并使浏览器转到http://www.example.com/item/iphone
有关语法的详细信息,请参见:
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
快速提问。没有mod_重写规则的acutal链接是www.example.com/item.php/itemid=phone
。是否可以将此链接重写到www.example.com/newyork/item.php/itemid=phone
您可以将www.example.com/newyork/item/iphone
重写为www.example.com/item/iphone
,但是“newyork”部分会发生什么?你说应该放在饼干里?嗯,“纽约”部分什么也没发生,只是放在饼干里供将来参考。我尝试这样做的主要原因是为了更好地提供电子邮件链接或转发。如果该链接仅提供[link](www.example.com/item/iphone),则无法判断用户位置(除非我将用户转发到其他页面以选择位置)。然而,如果链接已经有location[link](www.example.com/newyork/item/iphone),那么我们可以为第一次使用该链接的用户询问位置。这种情况主要适用于转发或电子邮件链接。希望这是有意义的。但是如果有人通过电子邮件访问www.example.com/newyork/item/iphone
链接,然后将其重写,以便/item/iphone
得到服务,/item/iphone
如何知道位置,因为他们单击了电子邮件中的链接,所以还没有cookie。你是对的。你能提出解决办法吗。所有我试图创建的是添加位置的链接,这样我就可以知道确切的项目位于或列出。谢谢。我会试试看。
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:/]