将位置作为子目录添加到带有 mod 重写的 URL



我正在处理根据位置显示项目的项目。首次用户必须选择一个位置才能搜索项目。此位置将另存为 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:/]

最新更新