"Сначала проверяется совпадение запроса с RewriteRule, а уже потом — дополнительные условия RewriteCond.
Пару слов стоит сказать о том, в каком порядке mod_rewrite выполняет директивы. Так как в .htaccess сначала идут RewriteCond, а потом RewriteRule, кажется, что mod_rewrite сначала проверяет все условия, а потом приступает к выполнению RewriteRule.
На самом деле все происходит наоборот. Сначала mod_rewrite проверяет, подходит ли текущее значение запроса под регулярное выражение RewriteRule, а уже потом будет проверять все условия, перечисленные в RewriteCond.
Так что если у вас в RewriteRule регулярное выражение на две страницы и вы, задумавшись о производительности, решили ограничить выполнение этого правила дополнительными RewriteCond, знайте — ничего не получится. В этом случае лучше использовать флаги RewriteRule [C] или [S], чтобы пропустить более сложное правило, если более простые проверки не сработали."
Виктор Таран: Не понял вас, приведите пример:)
Вы знаете, что RewriteCond - всегда проверяется после RewriteRule? Во всяком случае так в статье написано.
VisualIdeas: Еще методом тыка нашел такой работающий но жутко костыльный вариант. Он полностью делает, то что мне нужно. Но, если убрать эти два RewriteCond, то все перестает правильно работать - и отдается - index.html - всегда. И еще это жуткий костыль.
У меня вверху просто более усложненный вариант, где после "api" должна быть либо пустота, либо "/{далее что угодно}". Тк мне не нужно чтобы при вызове /apiiiii - октрывался index.php.
Но это можно опустить и все равно не работает.