You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Apache Rewrite规则在凌晨0:30-2点封禁Twitterbot/1.0或指定IP

特定时段精准封禁Twitterbot/1.0的Apache实现方案

不需要像参考示例那样无差别封锁指定时段的全部流量,只需要在原有时间判断的基础上,叠加用户代理(UA)或者客户端IP的匹配条件,两个维度同时命中时才触发403禁止访问,完全不影响正常访客在对应时段的访问。

核心规则逻辑拆分

所有判断条件默认按“逻辑与”执行,也就是必须同时满足所有判断,才会触发封禁动作:

  • 时间窗口精准匹配:覆盖凌晨0:30到2:00的全时段,排除0:00-0:29的正常流量
  • 访问身份匹配:只拦截UA为Twitterbot/1.0的请求,不拦截其他正常用户的浏览器UA
  • 可选叠加IP匹配:可根据观测到的爬虫真实来源IP,增加判断维度,避免UA被伪造时出现漏拦

可直接复用的完整配置

RewriteEngine On

# 时间窗口判断:命中00:30:00 ~ 01:59:59的请求
# 0点时段:仅拦截00:30-00:59的请求
RewriteCond %{TIME_HOUR}:%{TIME_MIN} ^00:(3[0-9]|4[0-9]|5[0-9])$ [OR]
# 1点时段:拦截01:00-01:59的全部请求
RewriteCond %{TIME_HOUR}:%{TIME_MIN} ^01:[0-5][0-9]$
# 身份判断:匹配携带Twitterbot/1.0 UA的请求
RewriteCond %{HTTP_USER_AGENT} ^.*Twitterbot/1\.0.*$

# 所有条件同时满足时,返回403状态码,终止后续规则执行
RewriteRule ^.*$ - [F,L]

可选扩展:叠加IP段封禁

如果已经观测到Twitterbot的爬取IP属于固定段,可调整规则逻辑为:时间在封禁窗口内 且 (UA匹配目标爬虫 或 来源IP属于目标爬取段),进一步提升封禁准确性,避免UA伪造绕过。调整后的配置片段为:

RewriteEngine On

# 第一层判断:是否在封禁时间窗口(满足任意时间分支即命中)
RewriteCond %{TIME_HOUR}:%{TIME_MIN} ^00:(3[0-9]|4[0-9]|5[0-9])$ [OR]
RewriteCond %{TIME_HOUR}:%{TIME_MIN} ^01:[0-5][0-9]$
# 第二层判断:是否为目标爬取来源(满足任意身份分支即命中)
# 两层判断之间默认按AND逻辑连接,必须同时满足才触发封禁
RewriteCond %{HTTP_USER_AGENT} ^.*Twitterbot/1\.0.*$ [OR]
RewriteCond %{REMOTE_ADDR} ^爬虫IP段的正则匹配表达式$

RewriteRule ^.*$ - [F,L]

常见踩坑提醒

  • 正则格式注意转义:UA和IP判断里的.字符要加\转义,避免正则中.匹配任意字符导致误拦
  • 提前校验时区:Apache的%{TIME_*}变量取的是服务器本地时区的时间,配置前要确认服务器时区和观测到爬虫触发故障的时间一致,避免因为时区偏移导致规则不生效
  • 逻辑标记不要写错:默认多个RewriteCond之间是“与”关系,只有需要多条件满足任意一个时才加[OR]标记,标记错位会导致规则变成无差别封时段、或者全天封禁爬虫的错误效果
  • 没必要全天封死Twitterbot:该爬虫的正常用途是抓取页面生成Twitter社交分享卡片,全天封禁会导致站点在Twitter的链接分享无法正常显示预览内容,仅在爬虫异常发起请求的时段精准拦截即可。

内容的提问来源于stack exchange,提问作者Ral AMORES GONZLEZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 15:54:05