【问题标题】:How to block bot requests to URLs that match a common pattern in Apache?如何阻止机器人对与 Apache 中的常见模式匹配的 URL 的请求?
【发布时间】:2011-06-06 03:55:24
【问题描述】:

我有一个 apache 服务器,它每 30 分钟一次被击中大约 100 次,请求与此模式匹配的 URL:

/neighborhood/****/feed

这些 URL 曾经有内容并且曾经是有效的。现在它们都是 404,所以这个机器人每次攻击我们时都会破坏性能。

我应该在我的 htaccess 文件中添加什么来阻止它?

注意:机器人位于 EC2 上,因此无法通过 IP 地址阻止。我需要阻止与该模式匹配的请求。

【问题讨论】:

    标签: regex apache bots


    【解决方案1】:

    mod_rewrite?但我怀疑它可以在 apache 级别上做得更快。 我会看看 nginx 作为前端,它在 404 和规则性能方面都更加高效:-)

    PS。此外,您可以尝试在某处返回重定向到 100Mb 文件以取笑这些机器人:-D

    【讨论】:

    • mod_rewrite 看起来我需要使用。不确定实际的重写规则应该是什么样子。
    • @bflora: 403 和 410 很简单([F] 和 [G]),但我不确定在 mod_rewrite 中是否有快速到达 404 的方法。
    • [F] 会很棒。规则应该是什么样的?到目前为止我正在尝试这个没有成功: RewriteRule ^neighborhoods/([^/\.]+)/?$ windycitizen.com [F]
    • RewriteRule pattern - [flags] 其中- 的意思是“实际上不要重写,只需应用标志”
    • 正在寻找编写正则表达式的帮助。 :( 不过感谢您的提示!
    【解决方案2】:

    在Apache前面放一个缓存系统或者CDN,allow your 404 responses to be cached.


    403 可以通过mod_rewrite 轻松设置:

    RewriteRule ^neighborhood/[^/]+/feed$ - [F]
    

    【讨论】:

    • 这比在我的 htaccess 中添加重写规则要多得多。 :)
    【解决方案3】:

    使用 mod_rewrite 规则应该可以让你到达你想去的地方:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/neighborhood/[^/]+/feed$ [NC]
    RewriteRule ^.*$ - [F,L]
    

    以上内容进入您的 .htaccess 文件,或者如果您希望将其放在您的 vhost 文件中(因为您已关闭 .htaccess 解析以提高性能 - 一个好主意):

    <Location />
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/neighborhood/[^/]+/feed$ [NC]
    RewriteRule ^.*$ - [F,L]
    </Location>
    

    给定一个 /neighborhood/carson/feed 的 URI,您应该期望得到如下响应:

    禁止

    您没有访问权限 /neighborhood/carson/feed 在此服务器上。

    Apache/2.2.16 (Ubuntu) 服务器位于 ... 80 端口

    这是在我在 Ubuntu 10.10 上运行 Apache/2.2.16 的本地 VM 上测试的。

    【讨论】:

    • url中包含***/neighborhood/***等邻居时如何设置
    【解决方案4】:

    以下代码可用于mod_rewrite中的404:

    RewriteRule pattern -  [R=404] [other_flags]
    

    【讨论】:

      【解决方案5】:

      以上答案屏蔽了所有用户,包括普通用户。我认为应该包括另一个条件来限制机器人:

      RewriteEngine On
      RewriteCond %{HTTP_USER_AGENT} ^.*(spider|HTTrack|Yandex|muckrack|bot).*$ [NC]
      RewriteCond %{REQUEST_URI} ^/neighborhood/[^/]+/feed$ [NC]
      RewriteRule ^.*$ - [F,L]
      

      【讨论】:

        猜你喜欢
        • 2021-04-16
        • 2019-11-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2020-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多