Вопрос по mod_rewrite

Discussion in 'PHP' started by Naydav, 17 May 2007.

  1. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Всем привет, прошу помочь...


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

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

    Если выбрано "Подарочная косметика " то урл имеет вид -
    "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 ?????
     
    #1 Naydav, 17 May 2007
    Last edited: 17 May 2007
  2. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Ты ведь сам ответил на свой вопрос, что надо реализовать 2 правила :)
    Code:
    RewriteRule ^([^/]+)/([^/]+)\.html$ view.php?cat=$1&podcat=$2
    RewriteRule ^([^/]+)\.html$ view.php?cat=$1
     
  3. Raz0r

    Raz0r Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    126
    Likes Received:
    20
    Reputations:
    0
    Второе не перекроет первое... т..к запросы разные, в первом случае это "view.php?cat=$1&podcat=$2", а во втором "view.php?cat=$1", мод реврайт действует точно по rewriterule
     
  4. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Для того, чтобы сделать правило более приоритетным, размещай его выше, чем менее приоритетное, и ставь в конце
    Code:
    [L]
    .
     
    #4 Helios, 17 May 2007
    Last edited: 17 May 2007
  5. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    А ты попробуй ;)
     
  6. Raz0r

    Raz0r Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    126
    Likes Received:
    20
    Reputations:
    0
    Мде я былЪ неправ :)
     
  7. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Содержание .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

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



     
    #7 Naydav, 18 May 2007
    Last edited: 18 May 2007
  8. Raz0r

    Raz0r Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    126
    Likes Received:
    20
    Reputations:
    0
    Да, насколько я помню, поднимали уже тему про мод-реврайт... пользуйся поиском, может чего полезного найдешь :)
     
  9. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Если что, мой вариант чуть-чуть отличается от твоего ;) так что будет все как надо...