RewriteRule 将请求传递给 index.php

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 索引捕获全部,第二组是我自己的规则,目的是防止热链接和直接访问图像。

据我了解,如果有人my.site.com/some.jpg直接在浏览器中输入内容,第一组规则不会捕获它,因为它的第一个条件(url 是常规现有文件名),但第二组规则应该向客户端返回 403 Forbidden 状态代码(因为没有 referer 并且模式以 .jpg 结尾)。

事情是这样的:我在 Drupal 错误数据库日志中收到大量条目,其中包含 jpg 文件名,但没有引用者。这意味着这些请求命中了 index.php,因为 Apache 无法写入数据库日志,只有 Drupal 可以。

我的问题是:是否有可能以及如何阻止那些访问 index.php 的请求并直接向客户端返回 403?

将第二个规则集(带有 jpg)移到第一个规则集(索引 catch-all)之前没有帮助。注释掉带有空 referer 的条件(RewriteCond %{HTTP_REFERER} !^$)确实有帮助,db log 中的条目不再出现,但目的也是阻止带有空 referer 的请求。

相关内容