Я хочу, чтобы мое RewriteRule не вступало в силу, если в файловой системе есть фактический файл, соответствующий запросу пользователя. Так что, если кто-то заходит на mysite.com/realfile.php?foo=bar, а realfile.php - это настоящий файл, серфингист получает обслуживание realfile.php? Foo = bar. Но если кто-то переходит на mysite.com/nonexistentfile.php и nonexistentfile.php не является настоящим файлом, то RewriteRule должен интерпретировать и передать запрос процессу process.php
В моем .htaccess есть следующее:
RewriteEngine on
RewriteRule (.*)\.php$ process.php?id=$1 [QSA]
Это работает, ЕСЛИ в файловой системе нет реального файла, соответствующего запросу пользователя. Это не работает, если пользователь вводит файл realfile.php? Foo = bar ... в этом случае он попадает в RewriteRule. Это работает, если они просто выполняют realfile.php, но я хочу, чтобы строки запроса все равно передавались в настоящий файл, если он существует. Я думал, что локальная файловая система всегда имеет приоритет над RewriteRule?
Я мог бы предложить что-то вроде следующего (аналогично тому, что использует WordPress):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Флаг -f проверяет наличие существующего файла, флаг -d проверяет наличие каталога, поэтому он применит перезапись, если запрос не для файла или каталога.