2015-02-11 71 views
2

我應該如何應用不同的RewriteRule.htaccess取決於URL中的參數數量?例如,htaccess頁面重定向參數條件

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文件,因爲如果我把它像這樣

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,我不明白我怎麼能將我的規則根據參數個數。

回答

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_]
+0

什麼呢?$手段? – 2015-02-11 15:20:12

+2

$意思是「匹配字符串結尾」,基本上你正在評估所有的表達式,因爲正則表達式可能是貪婪的,你保證檢查所有表達式 – 2015-02-11 15:22:10

+0

你也可以顛倒規則的順序,以便它檢查是否有3個參數第一,2秒,只有最後一個;只是爲了雙倍安全。 – CD001 2015-02-11 15:23:51