mod_rewrite 阻止请求的快速且低资源方式

mod_rewrite Fast and low resource way to block the request

我使用以下规则来阻止基于某些使用 modRewrite 的用户代理的请求

RewriteCond %{HTTP_USER_AGENT} ^.*(SCspider|PetalBot|ZyBorg).*$ [NC]
RewriteRule ^.*$ - [F,L]  

RewriteCond %{HTTP_USER_AGENT} ^.*(SCspider|PetalBot|ZyBorg).*$ [NC]
RewriteRule .* - [F,L]

但我需要知道是否有更好的方法(快速&快速)和更少的资源消耗 block/drop 请求
感谢您的帮助

使用您显示的示例尝试执行以下操作。以下应该比您尝试的更快。

RewriteCond %{HTTP_USER_AGENT} (?:SCspider|PetalBot|ZyBorg) [NC]
RewriteRule ^ - [F,L]

改进建议:

  • 我们需要在条件部分使用 .*,因为任何包含这些字符串的内容都应该被阻止,您可以将其更改为 \b(?:SCspider|PetalBot|ZyBorg)\b 以避免部分匹配(以防万一)。
  • 那么您将在不需要的情况下创建捕获组,因为它以后不会在任何地方使用。
  • 在 RewriteRule 部分我们也不需要使用 .* 我们可以简单地使用 ^ 来避免匹配所有内容,因为无论如何我们在条件部分进行匹配。