htaccess页面重定向参数条件

时间:2015-02-11 15:17:38

标签: php apache .htaccess mod-rewrite redirect

如何根据网址中的参数数量在.htaccess中应用不同的 RewriteRule ?例如,

1)如果URL有1个参数,那么它应该转到products.php

 www.domain.com/mobile
 RewriteRule ^([0-9a-zA-Z_-]+) products.php?parent=$1 [NC,L]

2)如果它有2个参数,则应该转到category.php

 www.domain.com/mobile/apple
 RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) category.php?parent=$1&child=$2 [NC,L]

3)如果它有3个参数,则应该转到list.php

 www.domain.com/mobile/apple/iphone6
 RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) list.php?parent=$1&child=$2&subchild=$3 [NC,L]

我是.htaccess中的新手,但是您可以看到我已经学会编写 RewriteRule ,但无法理解我如何将上述所有规则放在一个.htaccess文件中因为如果我这样说的话

RewriteEngine On
RewriteRule ^([0-9a-zA-Z_-]+) products.php?parent=$1 [NC,L]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) category.php?parent=$1&child=$2 [NC,L]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) list.php?parent=$1&child=$2&subchild=$3 [NC,L]
它应该是混淆和偏离它但是如何根据参数的数量应用这些上述规则?我希望我的问题足够清楚。

我的意思是说,如果这是一个编程问题而不是像这样的

if($countParameters = 1)
{
   //Rule 1
}
else if($countParameters = 2)
{
   //Rule 2
}
else if($countParameters = 3)
{
   //Rule 3
}

但它的.htaccess我无法理解如何根据参数的数量应用我的规则。

1 个答案:

答案 0 :(得分:4)

是的,确保在你的正则表达式中使用锚点$,以确保它与预期不匹配。

RewriteEngine On
RewriteRule ^([\w-]+)/?$ products.php?parent=$1 [QSA,L]
RewriteRule ^([\w-]+)/([\w-]+)/?$ category.php?parent=$1&child=$2 [QSA,L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ list.php?parent=$1&child=$2&subchild=$3 [QSA,L]
  • /?$允许在您的网址末尾添加可选的尾部斜杠
  • 注意我使用了\w代替[a-zA-Z0-9_]