Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > RewriteRule не хочет работать


Автор: eee 1.8.2008, 13:24
есть такие правила
Код

RewriteRule ^education/auto_school/category_a/ index.php?p=auto_school_cat&cname=category_a&cat=1 [QSA,L]
RewriteRule ^education/auto_school/category_a/([0-9]+) index.php?p=auto_school_cat&cname=category_a&cat=1&cpage=$1 [QSA,L]
RewriteRule ^education/auto_school/category_a/(.*).html index.php?p=auto_school_card&cname=category_a&cat=1&school_name=$1 [QSA,L]

RewriteRule ^education/auto_school/category_b/ index.php?p=auto_school_cat&cname=category_b&cat=2 [QSA,L]
RewriteRule ^education/auto_school/category_b/([0-9]+) index.php?p=auto_school_cat&cname=category_b&cat=2&cpage=$1 [QSA,L]
RewriteRule ^education/auto_school/category_b/(.*).html index.php?p=auto_school_card&cname=category_b&cat=2&school_name=$1 [QSA,L]

RewriteRule ^education/auto_school/category_c/ index.php?p=auto_school_cat&cname=category_c&cat=3 [QSA,L]
RewriteRule ^education/auto_school/category_c/([0-9]+) index.php?p=auto_school_cat&cname=category_c&cat=3&cpage=$1 [QSA,L]
RewriteRule ^education/auto_school/category_c/(.*).html index.php?p=auto_school_card&cname=category_c&cat=3&school_name=$1 [QSA,L]

RewriteRule ^education/auto_school/category_d/ index.php?p=auto_school_cat&cname=category_d&cat=4 [QSA,L]
RewriteRule ^education/auto_school/category_d/([0-9]+) index.php?p=auto_school_cat&cname=category_d&cat=4&cpage=$1 [QSA,L]
RewriteRule ^education/auto_school/category_d/(.*).html index.php?p=auto_school_card&cname=category_d&cat=4&school_name=$1 [QSA,L]

RewriteRule ^education/auto_school/category_e/ index.php?p=auto_school_cat&cname=category_e&cat=5 [QSA,L]
RewriteRule ^education/auto_school/category_e/([0-9]+) index.php?p=auto_school_cat&cname=category_e&cat=5&cpage=$1 [QSA,L]
RewriteRule ^education/auto_school/category_e/(.*).html index.php?p=auto_school_card&cname=category_e&cat=5&school_name=$1 [QSA,L]

RewriteRule ^education/auto_school/driving_trade/ index.php?p=auto_school_cat&cname=driving_trade&cat=6 [QSA,L]
RewriteRule ^education/auto_school/driving_trade/([0-9]+) index.php?p=auto_school_cat&cname=driving_trade&cat=6&cpage=$1 [QSA,L]
RewriteRule ^education/auto_school/driving_trade/(.*).html index.php?p=auto_school_card&cname=driving_trade&cat=6&school_name=$1 [QSA,L]

RewriteRule ^education/auto_school/ index.php?p=auto_school

проблема в том, что правило  ^education/auto_school/ и все правила категорий ^education/auto_school/category_a/ и т.д. все нормально работают, а вот правила для пейджера ^education/auto_school/category_a/([0-9]+) и для карточки школы ^education/auto_school/category_a/(.*).html не хотят - перекидует на страницу категории ^education/auto_school/category_a/ и все(
все файлы на сервере есть и если переходить не по чпу, а обычному урлу, то все хорошо работает.

пс. сам в реврацте разбираюсь не очень, знаю как написать правило, подставить значение, а вот что такое [QSA,L] - даже не знаю, приписал, потому что там в .htaccess все правила заканчивались этим модификатором.

помогите, пожалуйста, срочно нужно.

Автор: skyboy 1.8.2008, 13:38
модификатор L значит, что если адрес удовлетворяет правилу, то дальше проверка не идет.
вот твой адрес education/auto_school/category_a/какое_то_число  при проходе сверху вниз сначала удовлетворяет более общему правилу 
Цитата

^education/auto_school/category_a/

и до проверки правилами 
Цитата

RewriteRule ^education/auto_school/category_a/([0-9]+) index.php?p=auto_school_cat&cname=category_a&cat=1&cpage=$1 [QSA,L]
RewriteRule ^education/auto_school/category_a/(.*).html index.php?p=auto_school_card&cname=category_a&cat=1&school_name=$1 [QSA,L]

благополучно не доходит. и зачем? правило-то подходящее уже нашли?
если подумать логически, то самым простым решением будет переставить правила так, чтоб более специализированные шли вначале. 
а самым корректным решением - подкорректировать правило 
Цитата

^education/auto_school/category_a/

чтоб оно совпадало только с адресом "education/auto_school/category_a/" вот таким образом:
Код

^education/auto_school/category_a/$

однако поправлю: лучше учесть то, что адрес без последнего слеша тоже должен что-то вернуть. тогда окончательный вариант будет таким:
Код

^education/auto_school/category_a/?$


Автор: eee 1.8.2008, 19:59
огромное спасибо) ты просто меня спас! будет 100 постов дам плюс;)

Автор: skyboy 1.8.2008, 20:11
спасибо, мне и так нормально живется smile
а вот тебе без логики может сложно прийтись. воспитывай  smile 
И вопрос пометь решенным.

Автор: Mal Hack 1.8.2008, 21:17
Эм... А почему бы не сделать проще:
Код
RewriteRule ^education/(.+?)/(.*?)/(.*?)$ index.php?p=auto_school_cat&cname=$2&cat=1&cpage=$3 [QSA,L]
RewriteRule ^education/(.+?)/(.*?)/(.*?)\.html$ index.php?p=auto_school_card&cname=%2&cat=1&school_name=$3 [QSA,L]


Вообще, так, на глаз скрипт очень плохо спроектирован...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)