动态重写URL允许多个参数(如果存在)

时间:2014-01-29 21:01:48

标签: .htaccess mod-rewrite seo

我们已经为我们的电子商务应用程序构建了一个搜索模块。试图建立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 /

如果有人可以建议更好的方法来编写这些规则以支持所有这些额外的参数请求,我们非常感谢您的意见。

1 个答案:

答案 0 :(得分:0)

这篇文章帮助我们解决了我们的问题 .htaccess: GET variables are lost in rewrite

在我们的案例中,解决方案非常简单,控制器lang&命名我们与搜索参数分开然后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&params=/$4 [QSA,L]