RewriteRule将请求传递给index.php

我在.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索引catch-all,第二组是我自己的规则,目的是防止盗链和直接访问图像。

据我所知,如果有人直接inputmy.site.com/some.jpg到浏览器,第一组规则并不能捕捉它,因为它的第一个条件(url是一个常规的现有文件名),但是第二组规则应该向客户端返回一个403 Forbidden状态码(因为没有引用者,模式以.jpg结尾)。

这里是发生了什么事情:我得到了很多Drupal错误数据库日志与JPG文件名和没有引用。 所以这意味着这些请求打到index.php,因为Apache不能写入数据库日志,只有Drupal可以。

我的问题是:这是可能的,如何做到这一点,以阻止这些请求打到index.php,而是直接返回403到客户端?

在第一个规则集(index catch-all)之前移动第二个规则集(使用jpg)没有帮助。 使用空引用( RewriteCond %{HTTP_REFERER} !^$ )注释掉条件确实有帮助,db日志中的条目停止出现,但目的是阻止具有空引用者的请求。