Ваше правило должно работать, поскольку оно применяется, только если запрошенный URL-адрес не может быть сопоставлен с существующим файлом (!-f
), а не с существующей папкой (!-d
). Таким образом, если /demo/test
является действительной папкой, второе условие (RewriteCond %{REQUEST_FILENAME} !-d
) должно завершиться неудачей. И если запрашивается /demo
, и он не является ни существующим обычным файлом, ни существующей папкой, он должен быть перенаправлен на /index.php/demo
.