Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Вопрос по mod_rewrite (https://forum.antichat.xyz/showthread.php?t=40223)

Naydav 17.05.2007 16:22

Вопрос по mod_rewrite
 
Всем привет, прошу помочь...


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

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

Если выбрано "Подарочная косметика " то урл имеет вид -
"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

Цитата:

Сообщение от Raz0r
Второе не перекроет первое... т..к запросы разные, в первом случае это "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

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


Время: 16:39