根据QUERY_STRING拒绝访问该网站

我的网站“受到攻击”:来自许多不同IP的漫游器正在填充垃圾内容的表单。

IP地址不能过滤,它们总是不同的,所以我想按照QUERY_STRING进行过滤,来匹配这样一个URI:

www.site.com/search?field1=spamword&field2=another_spamword 

规则 :

 rewritecond %{QUERY_STRING} ^(.*)spamword(.*)$ rewriterule .* - [F,L] 

正则expression式看起来是正确的,但规则永远不会执行。 任何想法发生了什么?

谢谢。

我无法启用重写日志,所以我find了另外一种方法,直接在所有页面上使用表单来完成:

 if ( strlen( $_SERVER['REQUEST_URI'] )>650 ) { header('HTTP/1.0 401 Unauthorized'); .. error message to not panic real users ... exit; } 

因为我发现(注意访问日志并考虑表单域)超过650个字符的URL永远不是一个有效的请求。 (平均大小是4-6 Kb)

可悲的是正则expression式的问题仍然存在,并没有设法解决它。 但至less这个问题部分解决了(机器人仍在那里,但页面使用的资源非常less,因为没有查询完成)

幸运的是机器人会识别401错误并停止。

除了@Wrikken评论(检查日志,看看是否RewriteEngine ),唯一可能是错误的是正则expression式。 尝试删除():

 RewriteCond %{QUERY_STRING} ^.*spamword.*$