我目前正在开发一种需要使用.htaccess清理网址的高级搜索功能。此搜索可以具有3-5个参数,具体取决于用户输入的内容。所以基本上搜索字符串(在干净的URL之前)可能是这样的:
http://www.example.com?category=lorem&subcategory=ipsum&on_sale=1&featured=1&vendor=foo
这些参数也可以采用不同的顺序,因此我无法使用标准的正则表达式方法来清理URL。
答案 0 :(得分:0)
我解决这个问题的方法是使用关键字&网址中的条款。
我的最终网址如下:
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
);
希望这有帮助!