Во-первых, принцип: после любого переписывания весь набор правил обрабатывается с самого начала.Флаг [L]
не препятствует этому;он контролирует, является ли правило последним в текущем цикле.
В этом случае проблема является последним правилом.Он переписывает что-то вроде этого:
foo → index.php/foo → index.php/index.php/foo → ...
Когда вы удаляете две строки, это правило получает присоединенные условия !-f
и !-d
, что предотвращает цикл.
Из группировкииз линий выглядит так, как будто вы хотите прикрепить эти два условия ко всем следующим правилам.Вы не можете этого сделать, но вместо этого вы можете прикрепить противоположные условия к правилу, которое остановит обработку:
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]