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