0

我目前正在开发需要使用 .htaccess 干净 url 的高级搜索功能。此搜索可能有 3-5 个参数,具体取决于用户输入的内容。所以基本上搜索字符串(在干净的 URL 之前)可能是这样的:

http://www.example.com?category=lorem&subcategory=ipsum&on_sale=1&featured=1&vendor=foo

这些参数的顺序也可能不同,所以我不能使用标准的正则表达式方法来清理 URL。

4

1 回答 1

0

我解决这个问题的方法是在 URL 中使用关键字和术语。

我的最终到达网址如下所示:

http://www.example.com/search/term/lorem/category/shirts/subcategory/tank-top/color/red/featured/1

在 htaccess 中,我寻找符号“/search”并为随后的搜索参数制定规则。

RewriteRule ^search/([A-Za-z0-9_-\s]+)/([A-Za-z0-9_-\s]+)/?$ http://www.example.com/?page=search&keywords[]=$1&terms[]=$2 [QSA,NC]

等等等等

所以基本上在 PHP 中,所有奇数索引都存储在 $keywords 数组中,所有偶数索引都存储在 $terms 数组中。

然后,我根据可接受的关键字列表检查所有关键字,以防止 MySQL 注入。

$allowable_keywords = array('term','category','subcategory','color','featured');

然后,我可以通过组合关键字和术语,用这个整洁的小搜索数组过滤搜索结果。

$params = array_combine($keywords,$terms);

$params = array(
      'term'        => 'lorem',
      'category'    => 'shirts',
      'subcategory' => 'tank-top',
      'color'       => 'red',
      'featured'    =>  1 
);

希望这可以帮助!

于 2013-04-02T17:23:48.217 回答