У меня есть следующий код в моем файле .htaccess для блокировки запросов к файлам PHP и отображения файла 404.php.Перезапись файлов PHP в подкаталогах
RewriteCond %{REQUEST_URI} !(index|backup).php
RewriteCond %{REQUEST_URI} !^\/(dir1|dir1)\/
RewriteCond %{REQUEST_URI} !404.php
RewriteCond %{REQUEST_URI} .*\.php
RewriteRule .* 404.php [L]
Это блокирует запросы на все PHP файлы, за исключением index.php, backup.php и любые файлы в dir1 и dir2. Это работает для запросов в корне:
http://www.example.com/some-file.php
http://www.example.com/another-file.php
Но это не работает для файлов в подкаталогах:
http://www.example.com/sub/some-file.php
http://www.example.com/sub/another-file.php
я должен сказать, что подкаталог «суб» на самом деле не существовать. Запросы поступают от автоматических сканеров, которые ищут дыры на сайте. Я переписываю запросы на 404.php, так как этот файл не загружает базу данных или какое-либо приложение. Если я этого не сделаю, вместо этого загружается полное приложение 404, которое продолжает сбой MySQL, поскольку я получаю 100 запросов этих запросов в минуту (несколько раз в день).
Мой вопрос в том, как я могу изменить код для работы в подкаталогах? Я думал, что REQUEST_URI включает полный подкаталог в нем, поэтому код должен работать так, как есть?
Это не сработает, поскольку каталоги действительно не существуют и могут быть чем-то таким, как они запрашиваются с помощью автоматических сканеров эксплойтов. У меня нет определенного списка dirs для блокировки. Для меня не проблема блокировать все .php-файлы, так как единственным действительным файлом PHP на сервере является index.php, который разрешен с использованием этого правила. –