Regex apache mod_重写http_用户_代理,带有特殊字符问题

Regex apache mod_重写http_用户_代理,带有特殊字符问题,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我遇到了一个问题,垃圾邮件机器人/爬虫进入我的网站,请求显示在apache日志中: "GET / HTTP/1.1" 200 7128 "-" "\x09Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0" 这些请求的奇怪区别在于,出于某种原因,用户代理前面有一个选项卡(\x09),因此我尝试为这些请求创建一个.htaccess mod_rewrite筛选器 到目前为止,我没有成功创建一个合适的重写条件来拒绝这些请求。

我遇到了一个问题,垃圾邮件机器人/爬虫进入我的网站,请求显示在apache日志中:

"GET / HTTP/1.1" 200 7128 "-" "\x09Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"
这些请求的奇怪区别在于,出于某种原因,用户代理前面有一个选项卡(
\x09
),因此我尝试为这些请求创建一个.htaccess mod_rewrite筛选器

到目前为止,我没有成功创建一个合适的重写条件来拒绝这些请求。我尝试了以下方法:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^\x09Mozilla [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(%0A|%0D|%27|%3C|%3E|%00|%09).* [NC]
RewriteRule ^.* - [F,L]
第二次重写时,
%09
(制表符)是最重要的操作子句(其他的都是为了增加安全性)


我的语法错误在哪里?如何阻止这些请求?

问题是,当您键入\x09时,这不是一个特殊字符,而是字符\、x、0和9。如果需要选项卡,请尝试改用\t-这是选项卡的regexp版本。因此,重写条件应如下所示:

RewriteCond %{HTTP_USER_AGENT} ^\tMozilla [NC,OR]

好的,最后使用以下命令,似乎是在用403错误停止机器人的运行:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Mozilla/5\.0.*Windows\ NT\ 5\.1;\ rv:5\.0.*Gecko/20100101\ Firefox/5\.0 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(%0A|%0D|%27|%3C|%3E|%00|%09|\t|\x09).* [NC]
RewriteRule ^.* - [F,L]

这也不能有效地停止请求。即使按照您的建议更改了.htaccess,我仍然看到Apache日志中的
HTTP200
满足了上述请求