抓取排除文件按路径前缀匹配,写成通配或正则为什么不生效

📅 2026-10-12 👁️ 0

抓取排除文件写成通配或正则不生效,根本原因是这套协议从一开始就没打算表达「模式」,它只做一件事:按请求路径的前缀判断要不要排除。协议里只识别两个字段,匹配规则也简单到只有「路径是不是以某串开头」。理解这一点,才能解释为什么很多看起来合理的写法会被抓取方原样当成一条普通前缀。

协议里到底认哪两个字段

这套抓取排除标准只用两项指令:User-agent 和 Disallow。User-agent 声明规则针对哪个抓取方,Disallow 声明排除哪条路径前缀。它甚至没有 Allow 这个放行字段——早期版本里「明确放行某子路径」这种需求是表达不出来的,只能靠别的手段绕。

正因为字段就这两个,规则的表达力被限制得很死:一条 Disallow 后面跟的,就是被当作路径前缀的一串字符,不是模式串。

匹配为什么只按前缀

协议明确写着:globbing(通配)和正则表达式在 User-agent 与 Disallow 两行都不被支持。也就是说,抓取方拿你写的 Disallow 值,直接和请求 URL 的路径部分做前缀比较,从头对齐,对上了就排除,对不上就不排除。

你写的规则 抓取方实际怎么理解 结果
Disallow: /admin 排除所有以 /admin 开头的路径 符合预期
Disallow: /*.php 当成字面量,匹配以「*.php」开头的路径 几乎匹配不到任何东西
Disallow: /tag/[^0-9] 当成字面量前缀,不是正则 不生效

通配和正则写法会发生什么

写通配或正则不但不报错,反而更危险——它「看起来生效了」其实没有。你以为 /*-page-\d+ 挡掉了所有分页地址,抓取方实际在找一个以斜杠、星号、-page-、反斜杠、d、加号这一串字面字符开头的路径,几乎永远匹配不到。结果是:你以为排除的路径照常被抓取。

同理,想靠 ? 通配查询参数、想靠 [] 匹配字符集,在这套只认前缀的规则里都不成立。协议本身也提醒:抓取方可以选择无视这份文件,所以它从来不是安全边界,只是给守规矩抓取方的意向声明。

站内该按什么顺序写规则

实操上按三步走。第一步,把需求翻译成「前缀」而不是「模式」:想排除一个目录就写目录路径并以斜杠结尾,想排除一类命名规范就找到它们共同的路径开头。第二步,每条被排除的目录单独占一行,规则块之间用空行分隔,不同 User-agent 分组各自成块。第三步,站内配合伪静态规则把可控的动态地址变成长度稳定、前缀清晰的路径,再去排除会更准——因为伪静态后筛选页、列表页变成了规整目录,前缀匹配才表达得出来。AnQiCMS 后台可直接配置 Robots.txt,也支持自定义伪静态规则,两处配合就能把「该挡的路径」用前缀语言表达清楚。

常见问题

问:那我到底能不能只挡带某个参数的页面? 答:靠这份文件不行。它只按路径前缀匹配,查询参数在前缀规则里没法精确表达,要改用别的机制或在服务端处理。

问:写了正则没报错,是不是就生效了? 答:不是。没报错只代表格式被接受,正则会被当成字面量前缀,实际匹配不到目标路径。要核对匹配结果而不是依赖语法通过。

问:挡了抓取文件,内容就不会被抓了吗? 答:不会。协议本身承认抓取方可以无视这份声明,它是意向不是强制。真正要保护的内容要落在服务端权限与限频上。

相关文章

内容管理系统一个月内接连出安全版本,说明运维该改什么

内容管理系统在一个月内接连发布安全维护版本,说明运维的判断标准要从版本号转向修复内容。本文以近期***息为例:WordPress 在九月与十月接连发布三个安全维护版本,Joomla 同期面向 5.x 与 6.x 两支发布安全修复,从中提炼三条运维调整——按修复内容决策、升级留回滚点、升级后轮换密钥与口令。

2026-10-12

自建内容系统和按量计费的云服务,花费差在哪几项

自建内容系统与按量计费的 Headless 云服务,花费差异主要落在服务器、请求量、集成扩展与运维人力四项。小规模自建通常更省,规模上升后维护与人力成为主要支出;Headless 把前端部署到边缘、按接口取内容,省掉每次请求的服务端渲染,但引入接口调用计费。本文按四项拆开对比,并给出自托管的对照。

2026-10-12

未登录用户能读到什么,内容系统的权限边界容易漏在哪

未登录用户能读到什么,取决于权限边界划在哪一层。多数越权读取不在主文章本身,而在附属数据、接口列表和预览入口:评论、附件、草稿预览各有各的可见性。本文说明这三处最容易漏的位置,以及站内用用户组权限、文档状态与高危接口默认关闭来收口的做法。

2026-10-12

导出文件里也会藏注入,二阶 SQL 注入防在哪一步

二阶注入的特征是延迟执行:恶意内容第一次被写入时看起来无害,等到导出、导入或重建索引把它再当成语句消费时才触发。本文以 WordPress 7.1.3 修复的 WXR 导出中的二阶 SQL 注入为例,说明一阶与二阶的差别、导出为什么成了投递渠道,以及防护该放在写入、存储、消费哪几步和备份恢复流程要补的检查。

2026-10-12

评论在后台被打开时才触发的 XSS,内容系统该防在哪一层

有些跨站脚本不在前台触发,而是等管理员在后台打开待审评论时才被执行,这类缺陷的防护位置和前台完全不同。本文以近期 WordPress 7.1.3 修复的评论管理页存储型 XSS 为例,说明二次上下文为什么是独立攻击面、入库过滤为什么不够,以及后台侧要做的三层防护:输出转义、权限边界与内容审核。

2026-10-12

带筛选参数的列表页要不要放行抓取,排除路径怎么写

带筛选参数的列表页要不要放行抓取,要按页面类型分别判断。本文先分清站内搜索、自定义字段筛选、伪静态后的分面地址三类,再按抓取排除协议只认路径前缀这一限制,说明哪些该挡、哪些挡了反而伤收录,以及站内 robots 配置与伪静态规则两处该怎么分工来写排除路径。

2026-10-12

智能体用请求头要纯文本版本时,站点的转换该由哪一层做

智能体用 Accept 请求头要纯文本版本时,转换通常由边缘层代做,而不是源站自己出。本文讲清协商机制:客户端带头表达偏好,边缘从源站取原始网页再动态转换成 Markdown,返回的类型头与清理范围由转换方决定;源站原有的安全头透传,但长度、实体标识与修改时间头会被去掉。并说明站内该确认的三件事与模型说明文件的分工。

2026-10-12

边缘节点代做文本转换和程序自己出纯文本版本,建站时怎么选

给智能体提供纯文本版本有两条实现路径:边缘节点代做转换,源站不改代码但受托管档位与体积上限约束、控制粒度在响应头里;程序自己输出纯文本,内容与结构可控但多一份模板与缓存成本。本文摊开两条路径的控制面、体积与一致性差异,并给出四类建站场景的选择建议和该问的四个问题。

2026-10-12