Помоигите с мод-реврайт

Ice_sCream

Новичок
Помоигите с мод-реврайт

RewriteRule ^(.*).html$ index.php?path=main&file=$1
RewriteRule ^articles/(.*)/(.*).html$ index.php?path=$1&file=$2

Проблема в том, что мне нужно отдельно обрабатывать то, что после articles/, и то что просто идет (без articles/). Поэтому мне нужно в первой строке:

RewriteRule ^(.*).html$

Сделать отрицание, чтобы в строке не было articles/, но не знаю как это делать.
Просьба подсказать, уже совсем ничего не соображаю...
 

Angerslave

Новичок
Просто первые две строки местами поменяй. Встань на позицию реврайта. Он имеет строку, ищет паттерны. Первый же паттерн подходит и он реврайт на основании первой строки. Вторую он не посетит никогда, ибо условие первой выполняется всегда.
 

Ice_sCream

Новичок
Я менял местами. В силу специфики некоторых вещей, мне нужно сделать именно отрицание в первой строки слова "articles/"
 

Angerslave

Новичок
Какая разница между тем, что реврайтер сразу увидит соответствие articles и пройдёт по нему или что он сначала не увидит соответствия отрицанию articles и после этого перейдёт на вторую строку? Всё равно что писать if (!$true) { ... } elseif ($true) { ... } вместо if ($true) { ... } else { ... }. Казалось бы суть одна и та же, но в первом случае позаковыристее получается.
 

Ice_sCream

Новичок
У вас есть icq ? Давайте я вам покажу все на конкретном примере и вы поймете, что не работает ваш логичный метод. Я тоже так думал, но не понимаю видимо методы работы мод-реврайта. Он как будто бы снова обращается к файлу и там уже снова идет переброс на другой файл. Вот и нужна мне проверка, о которой я прошу помочь.

И яндекс и гугл я трес. Не помогает из-за, повторюсь, слабого знания модреврайта. Прошу помочь.
 

Gorynych

Посетитель PHP-Клуба
RewriteEngine On

RewriteRule articles/(.*/)?(.+)\.html$ /index.php?path=$1&file=$2 [L]
RewriteRule ^(.*)\.html$ /index.php?path=main&file=$1 [L]

1) забыли заэкранировать точку перед расширением "html"
2) уж извините, но "путь" в статьях может отсутствовать, так что пришлось использовать модификатор и вносить завершающий слеш внутрь выделяемой группы. В наследство - при наличии "пути" он будет заканчиваться "/"
3) ну и используйте [L] - в случае срабатывания правило считается последним и последующие не смотряться
 
Сверху