如何根据网址中的参数数量在.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
我无法理解如何根据参数的数量应用我的规则。
答案 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_]