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

Ice_sCream

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

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

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

RewriteRule ^(.*).html$

Сделать отрицание, чтобы в строке не было articles/, но не знаю как это делать.
Просьба подсказать, уже совсем ничего не соображаю...
 
Просто первые две строки местами поменяй. Встань на позицию реврайта. Он имеет строку, ищет паттерны. Первый же паттерн подходит и он реврайт на основании первой строки. Вторую он не посетит никогда, ибо условие первой выполняется всегда.
 
Я менял местами. В силу специфики некоторых вещей, мне нужно сделать именно отрицание в первой строки слова "articles/"
 
Какая разница между тем, что реврайтер сразу увидит соответствие articles и пройдёт по нему или что он сначала не увидит соответствия отрицанию articles и после этого перейдёт на вторую строку? Всё равно что писать if (!$true) { ... } elseif ($true) { ... } вместо if ($true) { ... } else { ... }. Казалось бы суть одна и та же, но в первом случае позаковыристее получается.
 
У вас есть icq ? Давайте я вам покажу все на конкретном примере и вы поймете, что не работает ваш логичный метод. Я тоже так думал, но не понимаю видимо методы работы мод-реврайта. Он как будто бы снова обращается к файлу и там уже снова идет переброс на другой файл. Вот и нужна мне проверка, о которой я прошу помочь.

И яндекс и гугл я трес. Не помогает из-за, повторюсь, слабого знания модреврайта. Прошу помочь.
 
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] - в случае срабатывания правило считается последним и последующие не смотряться
 
Сверху