我正在处理根据位置显示项目的项目。首次用户必须选择一个位置才能搜索项目。此位置将另存为 Cookie 以供将来参考。网址如下所示:
www.example.com/newyork
如果用户正在查看纽约中存在的项目,则该项目的 url 为:
www.example.com/item/iphone
上面的网址工作正常,但有一个问题。如果通过电子邮件将上述 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
这样的请求并提取pittsburgh
部分,将其存储在名为location
的cookie中(带有domain=example.com和path=/),然后重定向浏览器,以便cookie被浏览器存储并使浏览器转到http://www.example.com/item/iphone
有关语法的详细信息,请参阅 CO
标志的文档:
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
快速提问。没有mod_rewrite规则的针穗链接是
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:/]