У меня есть два набора правил в .htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://my\.site\.com\/ [NC]
RewriteRule .*\.(gif|jpg|png)$ - [NC,L,F]
Первый набор - это универсальный индекс индекса Drupal по умолчанию, а второй набор - мое собственное правило, с целью предотвратить хотлинкинг и прямой доступ к изображениям.
Насколько я понимаю, если кто-то набирает my.site.com/some.jpg
непосредственно в браузер, первый набор правил не улавливает его из-за своего первого условия (url - это обычное существующее имя файла), но затем второй набор правил должен возвращать клиенту код состояния 403 Forbidden (потому что нет ссылки и шаблон заканчивается на .jpg).
Вот что происходит: я получаю множество записей в журнале db ошибок Drupal с именами файлов jpg и без реферера. Это означает, что эти запросы попадают в index.php, потому что Apache не может записывать в журнал базы данных, только Drupal.
Мой вопрос: возможно ли и как это сделать, чтобы эти запросы не попадали на index.php и вместо этого возвращали 403 непосредственно клиенту?
Перемещение второго набора правил (с jpg) перед первым набором правил (универсальный индекс) не помогло. Комментируя условие с пустым реферером (RewriteCond %{HTTP_REFERER} !^$
) действительно помогло, записи в журнале db перестали появляться, но цель - также заблокировать запросы с пустым реферером.