【问题标题】:how to reject requests at server level and not pass them to the application?如何在服务器级别拒绝请求而不将它们传递给应用程序?
【发布时间】:2012-05-27 22:11:50
【问题描述】:

是否可以在应用程序目录中放置一些内容到 htaccess,以便某些请求在服务器级别被拒绝并且根本不会到达应用程序(在我的情况下是 Drupal),并且不要向应用程序日志发送垃圾邮件“找不到页面”?

我认为对 htaccess “禁止”的文件的请求被服务器拒绝并且没有进一步处理,但事实并非如此。

例子:

假设我自己的站点域是 example.com。 htaccess 有以下几行(这是防止盗链 jpg 图像的简化设置):

RewriteCond %{HTTP_HOST} ^example\.com [NC]
  RewriteCond %{HTTP_REFERER} !^$
  RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+\.)?example\.com [NC]
  RewriteRule \.(jpg)$ - [F,NC,L]

它可以工作,例如,如果我转到 http://altlab.com/hotlinking.html 并从我的 example.com 站点输入一个现有的 jpg 地址,它说图像无法显示。所以它被阻止了,好的。但是上面的请求也反映在了Watchdog(Drupal的内部日志)中,这是不行的。

有没有一种方法可以拒绝 Apache 服务器对 jpg 文件的外部域请求,并且不将这些请求进一步传递给应用程序?

【问题讨论】:

    标签: apache .htaccess drupal


    【解决方案1】:

    您需要使用 4XX 状态码进行重定向。

    RewriteRule ... [...,R=400]
    

    【讨论】:

    • 我将其更改为:RewriteRule \.(jpg)$ - [F,NC,R=400,L] 但请求在 Drupal 日志中仍然可见。还尝试了 [F,NC,L,R=400]。
    猜你喜欢
    • 2014-12-20
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多