根据用户代理字符串的一部分阻止 Web 请求 - 不起作用

根据用户代理字符串的一部分阻止 Web 请求 - 不起作用

我尝试根据网络请求是否包含一组字符串来阻止它们。据我所知,根据我自己的知识和在线搜索,我所得到的是正确的。但是,我仍然在访问日志中看到这些类型的请求。

如果请求在 Apache 配置中被阻止,是否仍会创建访问日志条目?或者我的 VHOST 定义有误?

RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_USER_AGENT} ^.*(icevikatam|AhrefsBot|spbot|MJ12|majestic12|Ahrefs).*$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(Semrush|SISTRIX|80legs|HTTrack|Xenu|dataprovider).*$ [NC]
RewriteRule .* - [F,L]

我的 Web 服务器是适用于 IBM i 的 Apache 2.4。

答案1

如果请求在 Apache 配置中被阻止,是否仍会创建访问日志条目?

是的,但是,根据上述内容,它们应该被记录为 403(禁止)RewriteRule

您的 mod_rewrite 规则看起来不错,除了一些小调整......

^.*(icevikatam|AhrefsBot|spbot|MJ12|majestic12|Ahrefs).*$

如果你只是想匹配这些词,你不需要^.*and锚点.*$任何地方在字符串中。上面的内容与以下内容相同:

(icevikatam|AhrefsBot|spbot|MJ12|majestic12|Ahrefs)
RewriteRule .* - [F,L]

旗帜F暗示L标志也是如此,因此L这里不需要明确的标志。

相关内容