2015-02-11 2 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, но как вы можете видеть, я научился писать 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 и я не могу понять, как я могу применить свои правила в зависимости от ряда параметров.

ответ

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] 
  • /?$ позволяет дополнительно слэш в конце ваших URL-адресов
  • Примечание Я использовал \w вместо [a-zA-Z0-9_]
+0

и что это? $ Означает? –

+2

$ означает «конец конца строки», в основном вы оцениваете все выражения, так как Regex может быть жадным, вы гарантируете, что хотите проверить все выражение –

+0

. Вы также можете изменить порядок правил, чтобы он проверял, есть ли 3 параметра сначала, 2 секунды и только один последний; просто быть вдвойне безопасным. – CD001

Смежные вопросы