我们已经为我们的电子商务应用构建了一个搜索模块,并试图构建 SEO 友好的页面。
下面的基本概念是有效的,但是当向我们的搜索添加额外的参数时,规则不再正常工作。
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/search/([^/]*)$ search.php?controller=$1&lang=$2&name=$3&search_keyword=$4 [L]
搜索示例,但在参数存在时还需要使用类别选择。 www.mysite.com/shop/lcd
目前这是有效的,但只支持 2 个类别集,因为我们有 2 个规则并且不使用搜索,问题是可能有多达 20 个类别集
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ search.php?controller=$1&lang=$2&name=$3&categories=$4=$5 [L]
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ search.php?controller=$1&lang=$2&name=$3&categories=$4=$5|$6=$7 [L]
www.mysite.com/shop/TV/Plasma+3D+Portable/(电视是主要类别,有 3 个子类别)
www.mysite.com/shop/TV/Plasma+3D+Portable/Computers/Mac+PC+Laptops+Tablets/ (计算机是主类,上面加4个子类)
这还需要与其他参数集一起使用 www.mysite.com/shop/TV/Plasma+3D+Portable/Computers/Mac+PC+Laptops+Tablets/manufacturers/brandA/brandB/brandC/
如果有人可以建议一种更好的方法来编写这些规则以支持所有这些额外的参数请求,我们将非常感谢您的意见。
最佳答案
这篇文章帮助我们解决了问题 .htaccess: GET variables are lost in rewrite
在我们的例子中,解决方案非常简单, Controller 语言和名称与搜索参数分开,然后 params=/$4 捕获其余的 URL,我们现在可以通过 PHP 展开和解析
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)$ /search.php?controller=$1&lang=$2&name=$3 [QSA,L]
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)/(.*)$ /search.php?controller=$1&lang=$2&name=$3¶ms=/$4 [QSA,L]
关于.htaccess - 动态重写的 URL 允许多个参数(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442575/