Хостинг. "Замещение" правил mod_rewrite

eyemchenko
10 років
0

А у меня такая вот загогулина. Есть к примеру 2 url и два правила:
1)menu.php?id=*
RewriteRule ^([^/]*)/$ /menu.php?id=$1 [L,QSA]

2)products.php?s=*
RewriteRule ^([^/]*)/$ /products.php?s=$1 [L,QSA]

Url преобразуется в нужный нам вид типа www.example.com/example/, с этим все нормально. Проблема вот в чем - правило нормально работает лишь то, которое указывается раньше, чем предыдущее, т.е. если первое правило стоит выше 2-ого, то нормально работает лишь страница menu.php, а products.php в это время использует первое правило, вместо указанного второго. Если же второе правило поднять - то соответственно все наоборот. Ох и объяснил наверное:) В общем есть ли какие-то варианты жесткого ограничения этих правил? Чтобы преобразование принимало участие лишь при наличии определенной страницы, определенных параметров и т.д.? Кто подскажет?

rudenko
10 років
0

Все правильно, два правила одновременно работать не будут, так как mod_rewrite при запросе /test/ не знает куда отправлять пользователя на страницу menu.php или products.php.
Нужно разделить правила, например так:
RewriteRule ^menu/([^/]*)/$ /menu.php?id=$1 [L,QSA]
RewriteRule ^products/([^/]*)/$ /products.php?s=$1 [L,QSA]
и соответственно формировать ссылки (/products/test/, /menu/test/).

eyemchenko
10 років
0

да, уже разобрался. тут как вариант еще есть, указать в условии - [0-9], если параметр конечно состоит только из цифр.

Тема закрита.