整页被拦,说明你启用的过滤列表里有一条规则匹配了网页地址本身,拦截器在连接服务器之前就把它挡下了。本文教你怎么读懂拦截页面并安全处理。
你点开一个链接,看到的却不是网页,而是广告拦截器弹出的警告:该页面因匹配 EasyList 等列表中的某条过滤规则而被拦截。什么都没加载出来,网站也根本没机会给你展示任何内容。这和“页面里的某个广告被隐藏”完全不同:拦截器拒绝的是整个文档。
核心要点
- **这是你自己的扩展在起作用,不是网站。**你启用的某个过滤列表里有一条规则匹配了页面地址本身,所以拦截器在浏览器连上服务器之前就把页面挡下了。
- **拦截页面不等于判定网站有害。**uBlock Origin 的文档明确说,严格拦截(strict blocking)的警告不一定意味着网站有害,只说明你选用的列表中存在匹配的过滤规则。
- **真正有用的是“哪条规则匹配了”。**仅含域名的规则默认会拦截根文档;其他模式只有带
document或all选项时才会。知道规则,就能判断这是有意收录,还是宽泛模式误伤了正常页面。 - **解决办法要“窄”,而不是“关掉拦截器”。**返回上一页、对可信页面临时放行、添加按站点的例外,或向列表维护者报告误报。
- **本文讲的是用户一侧。**网站如何检测你在用拦截器另有专文介绍;这里也不提供任何规避网站防护的建议。
“整页被拦”到底是什么意思
广告拦截器做的大部分事情你都看不见:隐藏一个广告位、丢掉一个追踪脚本的请求,你要看的页面照常加载,只是少了一块。严格拦截是例外:过滤规则匹配到的是你想打开的文档本身,已经没有什么可以“绕开”加载了。
按 uBlock Origin 自己的说法,严格拦截会拦下整个页面:根文档被拦截,浏览器不会与托管该页面的服务器建立任何连接。Wiki 还提到,Adblock Plus 等其他拦截器只过滤次级资源,uBlock Origin 在 0.9.3.0 版本之前也是如此,之后才开始过滤网页本身。不同拦截器的提示页措辞各异,你看到的具体句子取决于产品;它们共同的是背后的机制,下文就讲这个机制。
为什么过滤规则会匹配页面地址
静态网络过滤规则本质上是针对 URL 的匹配模式,由两件事决定:模式长什么样,以及适用于哪些请求类型。据 uBlock Origin 的严格拦截文档,“这条规则会不会拦下页面本身”取决于两种情况:
- 仅含域名的规则,例如
||example.com^,默认就会触发严格拦截。Wiki 说明这个默认值是为了减少误报:直接点名整个主机的规则,是对该主机的明确表态。 - 其他模式匹配规则,只有使用
document选项(别名doc)或all选项时才会触发。
静态过滤语法文档介绍了这些构件。document 选项匹配主框架,也就是根页面,只给出主机名的规则会自动包含它。all 选项是所有网络请求类型加上弹窗、文档、内联字体和内联脚本的简写。在 uBlock Origin 中,单纯的主机名模式表示“该站点及其所有子域名”,同样涵盖主文档。
这些规则从哪来?主要来自拦截器订阅的社区维护列表。EasyList 是最知名的一个,它的仓库同时也是问题反馈的地方。一条规则出现在列表里,可能因为这个域名确实提供广告或追踪,可能因为它是被列表视为追踪跳转的重定向或短链服务,也可能因为本想拦截一类东西的宽泛模式误伤了别的。域名易主后,也可能还留着为旧主人写的收录规则。
怎么读拦截页面
拦截页面的信息量比看起来大。按这个顺序读:
- **找到列表和规则。**uBlock Origin 的拦截页会写明匹配的过滤规则。规则是单纯的主机名,还是带
$document或$all的较长模式,能说明这次收录有多“有意”。 - **看地址。**Wiki 指出,被拦截的 URL 带查询字符串时,uBlock Origin 可以把它拆成参数。对于重定向链接,真正的目的地往往就在某个参数里。如果是这样,被收录的是重定向服务,最终页面本身可能没问题。
- **想想你是否本来就要访问这个站点。**一个你从没听说过、经由陌生链接到达的主机被拦,是过滤列表在正常工作;你天天访问的页面被拦,更可能是误报。
拦截页面上的几个选项
uBlock Origin 的拦截页提供一小组选择:
- **返回(Go back)**回到上一页。如果你本来就不想来这里,这是正确选择。
- **继续(临时)**会在一段时间内停用严格拦截。默认是 120 秒,可通过高级设置
strictblockingbypassduration调整。适用于你信任、且只需要打开一次的页面。 - **继续(永久)**的做法是点击“继续”前勾选“不要再就此站点警告我”。之后该站点将按严格拦截出现之前的方式过滤:其资源仍可能被拦,但页面本身允许打开。
Wiki 还记录了一个全局开关:在“我的规则”面板中添加 no-strict-blocking: * true 并点击提交,即可在所有站点停用严格拦截。对通常遇到的问题来说,这个杠杆太大了——为了一个站点而关闭所有站点的保护,所以优先使用上面按站点的选项。
误报的排查清单
如果这是你信任的页面,而且拦截看起来不对,就把它当作一次缺陷报告,而不是和拦截器的较量:
- 确认匹配的规则及其所在列表。不要猜,拦截页会告诉你。
- **检查列表是否是最新的。**列表会定期更新,过期的副本可能保留着维护者已修复的条目。更新列表后重新加载。
- **向列表维护者报告误报。**EasyList 项目在 github.com/easylist/easylist 跟踪问题。在那里报告能让所有人受益,而扩展厂商并不拥有列表内容。
- **使用最窄的有效例外。**例外规则(
@@)会放行匹配的请求,并且可以限定到单个站点,这比完全停用拦截器好得多。 - **只对信任的页面临时放行。**警告之所以出现,是因为确实有规则匹配;几秒钟的麻烦,比加载一个未知页面划算得多。
范围说明:本文讲的是在正常页面上误撞到拦截时怎么处理,不是绕过网站防护或任何人访问控制的指南。
所有浏览器的表现都一样吗?
不完全一样。经典版 uBlock Origin 用脚本逐个检查请求,并显示自己的拦截页;它在 Firefox 上仍受完整支持,而 Chrome 已逐步淘汰了它所依赖的 Manifest V2 扩展平台。在 Chrome 的 Manifest V3 下,拦截网络请求的扩展需要通过 declarativeNetRequest 向浏览器提交编译好的规则集,而不是用脚本逐个检查请求,所以“被拦页面”如何呈现、有哪些规则选项,会因拦截器而异。但思路是相通的:过滤列表中的一条规则匹配了文档 URL,拦截器在页面加载前就采取了行动。
确认到底是哪个浏览器开着拦截器
如果你不确定是哪个浏览器配置文件在拦截,BrowserInsight 的插件与扩展检测会运行网站同款的诱饵元素测试,显示你当前使用的浏览器里是否有内容拦截器在工作。它是外观层面的测试,所以过滤型 DNS 服务这类网络层拦截不会出现在结果里。想了解网站一侧的视角,请看网站如何检测你的广告拦截器;想知道过滤类扩展能看到你访问的页面里的什么,请读浏览器扩展的隐私风险。如果被拦的域名看起来像第一方、实际却不是,CNAME 伪装解释了为什么列表也会针对伪装成子域名的追踪主机。
常见问题
页面被拦的警告是否说明网站有危险?
不是。它只说明你选用的某个列表中有一条过滤规则匹配了这个地址。可能是真正的广告或追踪主机,也可能是宽泛模式或过期条目,所以先看匹配的规则再下结论。
是网站在拦我,还是我的广告拦截器在拦网站?
是你的广告拦截器。严格拦截时浏览器根本不会连接服务器,网站看不到这次请求,也就不可能拒绝你。
uBlock Origin 里的“继续”能持续多久?
临时放行默认持续 120 秒,可通过高级设置 strictblockingbypassduration 调整。继续之前勾选“不要再就此站点警告我”,则对该站点永久生效。
误拦了正常页面的规则该向谁报告?
向包含这条规则的列表的维护者。EasyList 的话就是它在 GitHub 上的问题跟踪页。扩展本身只是读取列表。


