GET 方法中动态 URL 的 htacess 规则

GET 方法中动态 URL 的 htacess 规则

我有一个 GET 请求

http://www.example.com/index.php?location=location&category=category&keyword=any+keyword

我已将此 URL 转换为

http://www.example.com/location/category/any+keyword

但问题是我的 URL 一直在变化。

  • 如果用户只输入一个关键字,那么 URL 就会像http://www.example.com/any+keyword,我只需要在标题和描述中搜索。

  • 如果用户只输入一个类别,URL 就会像我一样http://www.example.com/category,我只需要在该类别中搜索。

  • 如果用户输入位置和关键字,URL 将会类似http://www.example.com/location/any+keyword,我只需要在位置、标题和描述中进行搜索,反之亦然。

... 任何帮助将不胜感激。

答案1

如果关键字参数中确实有“+”号,你也许可以这样做。你总是需要有一些独特的模式:

RewriteRule    ^(.+\+.+)/?$              index.php?keyword=$1                           [NC,L]
RewriteRule    ^(.+)/?$                  index.php?category=$1                          [NC,L]
RewriteRule    ^(.+)/(.+\+.+)/?$         index.php?category=$1&keyword=$2               [NC,L]
RewriteRule    ^(.+)/(.+)/(.+\+.+)/?$    index.php?location=$1&category=$2&keyword=$3   [NC,L]

如果不是每次都有“+”号,而它可能只是一个普通字符串,那么这是不可能的,因为关键字和类别具有相同的正则表达式模式。

答案2

听起来,URL 可以由“location”、“category”和/或“any+keyword”的任意组合组成?(虽然您的示例没有明确表明“category”和“any+keyword”会一起使用?这样可以减少歧义一点点

除非“位置”、“类别”(和“任何+关键字”)值之间存在明显差异,或者不同位置类别足够小,您能够在指令中实际列出(硬编码)它们,那么没有办法单独处理这些 URL 差异.htaccess。它们是模糊的

如果可能的“位置”和“类别”值是唯一的,那么你也许可以重写后端应用程序的 URL,然后应用程序执行必要的查找以确定它是否是“位置”、“类别”(即“关键字”)。但这可能涉及更多工作(如计算能力) 并且不可扩展,因此不推荐。

实际上,鉴于您的示例 URL,从中可以得出的唯一可能有效的 URL 是:

  • http://www.example.com/location
  • http://www.example.com/location/category
  • http://www.example.com/location/category/any+keyword

但问题是我的网址一直在变化

您的应用程序在发生变化?还是入站链接?如果是前者,那么您需要解决应用程序中的歧义并创建一致的 URL 结构。

相关内容