【问题标题】:Rewrite url with multiple get variables用多个 get 变量重写 url
【发布时间】:2013-04-22 07:44:38
【问题描述】:

我有一个看起来像这样的网址 http://mysite.com/item/?food=1&drink=1&bar=1&name=Bomba

我想让它更友好,也许更安全,看起来像 http://mysite.com/item/Bomba

问题是有时drink 或bar 不会成为url 的一部分,所以我不知道如何使它与.htaccess 一起工作。此外,我不知道如何为多个 get 变量制定规则,以及是否可以在重写规则中使用条件(如果 drink==true 或类似的东西)。 而且我不想使用帖子,因为我希望能够分享链接。

到目前为止,我做了这样的事情

mysite.com/item/1/Bomba.menu

规则

选项 +FollowSymlinks
重写引擎开启
RewriteRule ^item/(.+)/(.+).menu item/?food=$1&drink=$1&bar=$1&name=Bomba [nc]

但它只有在 url 保持不变的情况下才有效。 谢谢

【问题讨论】:

标签: php mod-rewrite url-rewriting


【解决方案1】:

[编辑答案]

您需要将它们设置为键/值对,因为您无法判断是饮料 ID 还是酒吧 ID。

我能想到的另一种看起来不太优雅的方法是给 id 加上前缀,所以如果它是一个饮料 ID,那么就创建一个动态 URL:

http://mysite.com/item/D1/B4

如果它以'D'为前缀,那么它是一种饮料,'B'代表酒吧等

【讨论】:

  • 我不太明白这个。我得到了一个根据为项目设置的内容动态创建的 url。然后在模板页面上,我有条件获取在 url 中设置的任何 get 变量并将其显示在前端。基本上这是一个提供位置价格的菜单。
  • 获取您的动态 URL mysite.com/item/Bomba。一旦被请求,它将通过 .htaccess,然后将 'item/Bomba' 放入查询字符串参数中:?request=item/Bomba,然后通过 url_handler.php 脚本。进入脚本后,您也可以对所需的 URL 执行任何测试。
  • 你的意思是总是需要参数吗? food、drink、bar 和 name,然后您想创建一个仅包含一些必需参数的短 URL,因此您希望将缺少的参数默认为 1,这样您的页面仍然有效?
  • 不,我检索 url 中的任何变量,所以我最多可以有最多 4 个和最少 2 个 get 变量。食物变量和名称将始终存在,并且饮料和酒吧将是可选的,有时我会只喝饮料,有时酒吧,有时两者兼而有之。因此,我不知道如何编写重写规则。
  • 目前我有类似的选项 +FollowSymlinks RewriteEngine on RewriteRule ^item/(.+)/(.+)/(.+)/(.+) item/?food=$1&drink= $2&bar=$3&name=$4 [nc] RewriteRule ^item/(.+)/(.+)/(.+) item/?food=$1&bar=$2&name=$3 [nc] RewriteRule ^item/(.+ )/(.+)/(.+)/ item/?food=$1&drink=$1&name=$3 [nc] 但我不知道如何设置何时喝水和何时酒吧。
【解决方案2】:

所以最后我做了这个短链接http://mysite.com/item/1/D1/W1/Bomba 带我到这里http://mysite.com/item/?food=1&drink=1&wine=1&name=Bomba 并将此规则添加到 .htaccess 文件中。

Options +FollowSymlinks  
RewriteEngine on  
RewriteRule ^item/(.+)/(D.)/(W.)/(B.+)/(.+) item/?food=$1&drink=$1&wine=$1&bar=$1&name=$5 [nc]
RewriteRule ^item/(.+)/(D.+)/(W.+)/(.+) item/?food=$1&drink=$1&wine=$1&name=$4 [nc]
RewriteRule ^item/(.+)/(D.+)/(B.+)/(.+) item/?food=$1&drink=$1&bar=$1&name=$4 [nc]
RewriteRule ^item/(.+)/(W.+)/(B.+)/(.+) item/?food=$1&wine=$1&bar=$1&name=$4 [nc]

我希望它会帮助别人。 :)

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多