.htaccess - 如何在 htaccess 中使用 mod_rewrite 阻止用户代理

标签 .htaccess mod-rewrite

我试图阻止访问此访问我的用户代理:Mozilla/5.0 (compatible; Seekport Crawler; http://seekport.com/ (最后没有 ),这不是故障)。
我试过这个(还有两个代理)

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} OnalyticaBot [NC, OR]
RewriteCond %{HTTP_USER_AGENT} Re-re Studio (+http://vip0.ru/) [NC, OR]
RewriteCond %{HTTP_USER_AGENT} Mozilla/5.0 (compatible; Seekport Crawler; http://seekport.com/ [NC]
RewriteRule .* - [F,L]
我已经用这个语法尝试了更多(使用整个字符串并且只使用“Seekport”),但仍然看到代理用户在日志中要求
RewriteCond %{HTTP_USER_AGENT} ^.(user_agent1|user_agent2).$ [NC]
你可以帮帮我吗?

最佳答案

RewriteCond %{HTTP_USER_AGENT} Re-re Studio (+http://vip0.ru/) [NC, OR]

默认情况下,RewriteCond 的第二个参数指令是正则表达式(regex),因此任何元字符(例如 +. )都需要正确转义。但重要的是,空格是 Apache 配置文件中的分隔符,因此这些也需要转义,否则,该指令将完全无效。在 Apache 上,由于“错误的标志分隔符”,上述内容将导致 fatal error (500 Internal Server Error)。在 LiteSpeed 上,它只会默默地失败。
空格可以通过以下任一方式“转义”:
  • 在空格前加一个反斜杠。例如。 \ hello\ world
  • 或者,使用 \s表示任何空白字符的速记字符类。例如。 hello\sworld .
  • 或者,用双引号将整个参数括起来。例如。 "hello world" .
  • [NC, OR] - 但是,标志分隔符参数中不应有空格。这应该是 [NC,OR] (没有空间)。
    所以,上面的可以写成这样:
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} OnalyticaBot [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "Re-re Studio (\+http://vip0\.ru/)" [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "^Mozilla/5\.0 (compatible; Seekport Crawler; http://seekport\.com/$" [NC]
    RewriteRule ^ - [F]
    
    正则表达式 .*RewriteRule模式可以简化为^ (效率更高)和 L使用 F 时不需要标志——这是暗示。
    如果你想匹配整个用户代理字符串,那么你可以使用 = (相等的字典字符串比较)前缀运算符(与双引号一起)在 CondPattern 上测试精确匹配。
    例如:
    RewriteCond %{HTTP_USER_AGENT} "=This is the exact user-agent I want to block"
    RewriteRule ^ - [F]
    
    在上面的例子中,字符串 This is the ... block是一个普通的字符串,而不是一个正则表达式。

    关于.htaccess - 如何在 htaccess 中使用 mod_rewrite 阻止用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66137651/

    相关文章:

    django - .htaccess 重定向除一个之外的所有 URL

    php - 如何阻止来自某些国家/地区的访问者访问我的网站 (xyz.com/thisFile.php) 上的文件?

    php - Pimcore 安装页面空白

    apache - 重定向到 rtmp 协议(protocol)时,RewriteRule 将子文件夹附加到 url

    regex - 如何使 mod_rewrite 从子域重定向到查询字符串?

    linux - 503 htaccess 文件仅部分工作

    .htaccess - 使用带有 .htaccess 重写的 SSL 证书

    php - CakePHP 身份验证后访问受限文件

    regex - 使用 URL 参数 ID 编号范围进行 HTACCESS 重定向

    .htaccess - Yii seo url 重写 urlManager 和 .htaccess