如何配置Apache RewriteCond正确屏蔽带单引号的Seekport Crawler
故障根源
- 逻辑衔接错误:Apache重写规则的
RewriteCond默认用「且」逻辑连接,只有在末尾加[OR]才会转为「或」逻辑。你现有规则的最后一条常规Seekport匹配项没有加[OR],如果直接在后面追加新的带单引号UA匹配规则,会被判定为需要同时满足「常规Seekport UA」和「带单引号的Seekport UA」两个完全互斥的条件才触发拦截,根本不可能匹配到实际访问请求,这是规则不生效的核心原因。 - 匹配逻辑的认知偏差:你提到的单引号在Apache重写规则中不属于特殊字符,不需要转义。规则中的双引号仅作为字符串包裹符(避免内容里的空格被拆分为规则参数),本身不属于匹配内容,只要保证要匹配的单引号是作为内容写在双引号包裹的区间内即可,不存在引号匹配错误的问题。
可行配置方案
方案1:兼容现有规则的精准匹配方案
如果要保留现有精确匹配其他UA的逻辑,只需要修正规则逻辑衔接,新增对应匹配项即可:
RewriteEngine On # 原有OnalyticaBot规则保留 RewriteCond %{HTTP_USER_AGENT} OnalyticaBot [NC,OR] # 原有Re-re Studio规则保留 RewriteCond %{HTTP_USER_AGENT} "=Re-re Studio (+http://vip0.ru/)" [NC,OR] # 原有常规Seekport规则末尾追加OR,和下一条带单引号的规则做或逻辑 RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (compatible; Seekport Crawler; http://seekport.com/" [NC,OR] # 新增带前后单引号的Seekport UA精确匹配规则 RewriteCond %{HTTP_USER_AGENT} "='Mozilla/5.0 (compatible; Seekport Crawler; http://seekport.com/'" [NC] # 以上任意一个条件满足就返回403拦截 RewriteRule ^ - [F]
方案2:全量拦截Seekport Crawler省心方案
因为你的需求是完全拦截所有Seekport Crawler,不需要区分UA的前后缀变体,直接匹配UA中包含Seekport Crawler关键字即可,后续就算Seekport调整UA格式也能正常拦截,不需要反复更新规则:
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} OnalyticaBot [NC,OR] RewriteCond %{HTTP_USER_AGENT} "=Re-re Studio (+http://vip0.ru/)" [NC,OR] # 直接匹配UA中任意位置包含Seekport Crawler的内容,忽略大小写 RewriteCond %{HTTP_USER_AGENT} "Seekport Crawler" [NC] RewriteRule ^ - [F]
补充说明:这个写法默认是部分匹配,只要UA中出现对应字符串就会触发,不需要加其他锚定符,比精确匹配的适配性更强。
内容的提问来源于stack exchange,提问作者Ral AMORES GONZLEZ
相关产品推荐
相关产品推荐

