PDA

Просмотр полной версии : Вопрос по mod_rewrite


Naydav
17.05.2007, 16:22
Всем привет, прошу помочь...


На сайте ссылки вида

Подарочная косметика
Для женщин Для мужчин

Если выбрано "Подарочная косметика " то урл имеет вид -
"http://podarkov.net.ua/present_cosmetic.html"

Если выбрано "Для женщин " то урл имеет вид -
"http://podarkov.net.ua/present_cosmetic/dlya_zenchin.html"


Второе решаеться правилом -

RewriteRule ^(.*)/(.*).html$ view.php?cat=$1&podcat=$2


Но как быть с первым,
если запишем
RewriteRule ^/(.*).html$ view.php?cat=$1
то это правило перекроет приведенное выше

и если нажать ссылку вида "Для женщин"
то в $_GET[cat] = "present_cosmetic/dlya_zenchin",
а не "dlya_zenchin"!


как следует поступить?

вариант может такой -

проверяем урл если он вида
http://site/present_cosmetic/dlya_zenchin.html
запускаем правило
RewriteRule ^(.*)/(.*).html$ view.php?cat=$1&podcat=$2


а если урл вида
http://site/present_cosmetic.html
то запускаем
RewriteRule ^/(.).html$ view.php?cat=$1


НО КАК ТАКУЮ ПРОВЕРКУ РЕАЛИЗОВАТЬ В .htaccess ?????

hidden
17.05.2007, 18:58
Ты ведь сам ответил на свой вопрос, что надо реализовать 2 правила :)
RewriteRule ^([^/]+)/([^/]+)\.html$ view.php?cat=$1&podcat=$2
RewriteRule ^([^/]+)\.html$ view.php?cat=$1

Raz0r
17.05.2007, 19:11
Второе не перекроет первое... т..к запросы разные, в первом случае это "view.php?cat=$1&podcat=$2", а во втором "view.php?cat=$1", мод реврайт действует точно по rewriterule

Helios
17.05.2007, 19:23
Для того, чтобы сделать правило более приоритетным, размещай его выше, чем менее приоритетное, и ставь в конце [L].

hidden
17.05.2007, 19:34
Второе не перекроет первое... т..к запросы разные, в первом случае это "view.php?cat=$1&podcat=$2", а во втором "view.php?cat=$1", мод реврайт действует точно по rewriteruleА ты попробуй ;)

Raz0r
18.05.2007, 11:42
Мде я былЪ неправ :)

Naydav
18.05.2007, 12:39
Ты ведь сам ответил на свой вопрос, что надо реализовать 2 правила

Содержание .htaccess:
RewriteRule ^(.*).html$ view.php?cat=$1
RewriteRule ^(.*)/(.*).html$ view.php?cat=$1&podcat=$2


При ссылке http://site/present_cosmetic.html
$_GET[cat] = present_cosmetic

При ссылке http://site/present_cosmetic/dlya_zenchin.html
$_GET[cat] = present_cosmetic/dlya_zenchin



т.е первое правило как бы говорит все, что после индекса в переменную $1( оно прекрівает первое :()
но это нужно только когда ссылка вида http://site/present_cosmetic.html


А при ссылке вида http://site/present_cosmetic/dlya_zenchin.html
в эту переменную $1($_GET[cat] ), записивает present_cosmetic/dlya_zenchin

Все начинает работать если первое правило отключить...



вариант может такой -

проверяем урл если он вида
http://site/present_cosmetic/dlya_zenchin.html
запускаем правило
RewriteRule ^(.*)/(.*).html$ view.php?cat=$1&podcat=$2


а если урл вида
http://site/present_cosmetic.html
то запускаем
RewriteRule ^/(.).html$ view.php?cat=$1


НО КАК ТАКУЮ ПРОВЕРКУ РЕАЛИЗОВАТЬ В .htaccess ?????

Raz0r
18.05.2007, 14:12
Да, насколько я помню, поднимали уже тему про мод-реврайт... пользуйся поиском, может чего полезного найдешь :)

hidden
18.05.2007, 20:26
Если что, мой вариант чуть-чуть отличается от твоего ;) так что будет все как надо...