AdGuard 是一款强大的广告拦截与隐私保护工具,其核心能力之一便在于其灵活且可高度定制的“规则”系统。这些规则是 AdGuard 识别、阻断或修改网页内容、网络请求行为的指令集,让用户能够对在线体验拥有极致的控制权。本文将深入探讨 AdGuard 规则的方方面面,包括它们是什么、为何重要、如何管理、如何编写以及如何优化,旨在帮助您全面掌握这一工具的强大功能。

什么是 AdGuard 规则?

AdGuard 规则本质上是一系列用于过滤网络流量和网页内容的指令。它们告诉 AdGuard 应该拦截哪些广告、跟踪器,隐藏哪些不必要的元素,甚至修改特定网站的行为。这些规则通常遵循特定的语法,以便 AdGuard 引擎能够高效地解析和执行。

规则的分类与作用

AdGuard 规则可以大致分为以下几类,它们共同协作,为用户提供全面的保护:

1. 内置过滤列表

这是 AdGuard 提供的开箱即用的规则集合,由专业的 AdGuard 团队或社区维护。它们是根据大量数据和常见广告/跟踪模式编写的,涵盖了绝大多数日常浏览场景的需求。常见的内置列表包括:

  • AdGuard Base filter (AdGuard 基本过滤器):主要用于拦截各类广告。
  • AdGuard Tracking Protection filter (AdGuard 跟踪保护过滤器):专注于阻断各种在线跟踪器。
  • AdGuard Annoyances filter (AdGuard 烦恼过滤器):用于隐藏网站上的弹窗、通知请求、订阅提示等令人厌烦的元素。
  • AdGuard DNS filter (AdGuard DNS 过滤器):在 DNS 层级进行过滤,适用于 DNS 产品如 AdGuard Home 或公共 DNS 服务器。

这些列表是自动更新的,确保拦截效果能跟上广告和跟踪技术的发展。

2. 用户自定义规则(User Rules)

这是 AdGuard 规则系统中最为灵活和强大的部分。用户可以根据自己的特定需求,手动添加、修改或删除规则。这些自定义规则的优先级通常高于内置过滤列表,这意味着它们可以覆盖或补充内置列表的行为。自定义规则的用途极其广泛,例如:

  • 拦截内置列表未能识别的特定广告。
  • 隐藏网站上某个特定、但并非广告的元素(如推广信息、导航栏中的某个按钮)。
  • 解决特定网站的反广告机制。
  • 放行被错误拦截的合法内容。

3. DNS 过滤规则 (AdGuard DNS/Home 特有)

对于 AdGuard DNS 产品(如 AdGuard Home 或其公共 DNS 服务),规则的运行模式略有不同。在 DNS 层级,规则主要针对域名进行操作。当设备尝试解析某个域名时,AdGuard DNS 会根据规则判断是否应该阻断该域名的解析。这些规则通常更为简单,以域名为主,例如 `||example.com^` 这样的格式。

为何需要 AdGuard 自定义规则?

尽管 AdGuard 提供的内置过滤列表功能强大,足以应对多数情况,但在特定场景下,自定义规则的介入显得尤为重要,甚至不可或缺。

1. 精准控制与特定需求

内置列表是通用的解决方案,不可能完美覆盖所有网站和所有用户的需求。自定义规则允许您进行高度细致的控制:

  • 精准阻断: 某些网站可能会采用新的广告形式或绕过现有列表的广告展示方式,此时您可以编写特定的元素隐藏规则或网络请求阻断规则。
  • 个性化定制: 除了广告,您可能希望隐藏网站上的特定推广内容、社交分享按钮、评论区(如果您不关心),或者调整某个元素的样式。自定义规则能满足这些个性化需求。
  • 解决误伤: 有时内置列表可能会误伤(“假阳性”)合法的网页元素或功能。通过编写放行规则,您可以精确地恢复这些被误拦截的内容。

2. 规避反广告机制

越来越多的网站开始检测并阻止广告拦截器,要求用户关闭拦截器才能访问内容。这些“反广告墙”通常会通过识别拦截器发出的特定请求模式或检测页面元素来工作。自定义规则可以帮助您:

  • 隐藏反广告提示: 通过元素隐藏规则将反广告弹窗或横幅遮盖。
  • 伪装拦截器: 某些高级规则(如脚本注入规则)可以修改网站的检测机制,使其认为您没有使用广告拦截器,从而绕过限制。

3. 优化浏览体验与性能

并非所有被拦截的内容都是广告,有些可能是影响页面加载速度或视觉体验的非必要元素。自定义规则可以:

  • 加速页面加载: 阻断不必要的脚本、图片或字体文件,减少网络请求,从而加快页面渲染速度。
  • 清理视觉噪音: 隐藏那些虽然不是广告,但却占据屏幕空间、分散注意力的元素,使页面更加清爽。

4. 隐私保护增强

除了 AdGuard 内置的跟踪保护,您可能希望阻断来自特定公司或域名的跟踪器,即使它们没有被通用列表识别。通过自定义规则,您可以手动添加这些隐私保护指令,进一步强化您的在线隐私。

AdGuard 规则在哪里添加与管理?

AdGuard 规则的管理界面因产品类型(桌面应用、浏览器扩展、DNS/Home)而异,但核心逻辑是相似的。

1. AdGuard 桌面应用(Windows/macOS/Android/iOS)

在桌面应用中,您可以找到一个专门的“用户规则”或“过滤器”管理界面。

  • 路径示例(Windows/macOS): 打开 AdGuard 应用 -> 点击左侧菜单栏的“过滤器”或“设置” -> 找到“用户规则”或“用户过滤器”选项。
  • 路径示例(Android/iOS): 打开 AdGuard 应用 -> 点击底部导航栏的“设置” -> “内容拦截”或“过滤器” -> “用户过滤器”。

在此界面,您可以看到一个文本编辑框,可以手动输入规则,或者导入/导出规则文件。

导入导出

自定义规则可以导出为 `.txt` 或 `.txt` 格式的文件,方便备份或在不同设备间共享。同样,您也可以从文件导入规则集。

2. AdGuard 浏览器扩展(Chrome/Firefox/Edge/Safari)

浏览器扩展提供了更便捷的方式来管理和创建规则。

  • 管理路径: 点击浏览器工具栏上的 AdGuard 图标 -> 点击右上角的齿轮图标(设置) -> 找到“自定义过滤器”或“用户规则”选项。
  • 元素阻断器: 这是浏览器扩展特有的强大功能。当您在浏览网页时,点击 AdGuard 扩展图标,然后选择“阻断页面上的元素”(或类似选项),AdGuard 会进入元素选择模式。您只需点击页面上想要隐藏或阻断的元素,AdGuard 会自动生成一条对应的元素隐藏规则。您可以选择确认并保存此规则。

3. AdGuard DNS/Home

如果您使用的是 AdGuard DNS 服务或自部署的 AdGuard Home,规则管理通常通过其 Web 用户界面进行:

  • AdGuard Home: 登录 AdGuard Home 的 Web UI -> 点击左侧菜单的“过滤器” -> “自定义过滤规则”。在这里可以添加域名阻断或放行规则。
  • AdGuard DNS (公共服务): 登录 AdGuard DNS 仪表盘 -> 找到“自定义规则”或“过滤器”选项。

4. 规则的获取来源

除了自己编写,您还可以从以下来源获取有用的 AdGuard 规则:

  • AdGuard 社区论坛: 许多用户会在这里分享他们解决特定网站问题的自定义规则。
  • GitHub / Gitee: 许多开发者和爱好者会在代码托管平台维护自己的 AdGuard 规则列表或补充过滤器,您可以直接订阅或复制。
  • 专业博客或文章: 有时会有技术博主分享针对特定难题的 AdGuard 规则解决方案。

如何编写 AdGuard 规则?

AdGuard 规则的语法虽然复杂,但掌握一些常用模式即可应对大部分场景。其语法基于 Adblock Plus 语法,并在此基础上进行了扩展。

基本语法构成

一条 AdGuard 规则通常包含以下部分:

  • 选择器: 指定要作用的元素或请求类型。
  • 操作符: 定义规则的行为(阻断、隐藏、放行等)。
  • 修饰符: 提供额外条件,使规则更精确。

常见的规则类型与示例

1. 基础域名阻断规则

用于阻断整个域名下的所有请求或网页内容。通常用于阻断广告服务器或恶意网站。

  • 阻断某个域名: ||example.com^

    这会阻断所有从 example.com 或其子域名加载的内容,例如 ads.example.comtracker.example.com 等。
  • 阻断特定路径的资源: ||example.com/ads/*.js^

    阻断 example.com 域名下所有路径包含 /ads/ 且以 .js 结尾的请求。

2. 元素隐藏规则

用于隐藏网页上特定的 HTML 元素。这些规则不会阻断网络请求,只是让元素在页面上不可见。

  • 基本元素隐藏: ##.ad-banner

    隐藏所有 class 属性包含 ad-banner 的元素。
  • 按 ID 隐藏: ##div#promo-popup

    隐藏 ID 为 promo-popup<div> 元素。
  • 特定网站的元素隐藏: example.com##.floating-ad

    只在 example.com 网站上隐藏 class 属性为 floating-ad 的元素。
  • 按属性隐藏: ##div[data-ad-type="native"]

    隐藏所有 data-ad-type 属性值为 native<div> 元素。

3. URL 路径阻断规则

用于阻断包含特定字符串或符合特定模式的 URL 请求。

  • 阻断包含字符串的 URL: /tracker.js

    阻断任何 URL 路径中包含 /tracker.js 的请求。
  • 精确阻断特定图片: ||example.com/banner_ad_728x90.png^$image

    精确阻断 example.com 上的特定横幅图片请求。$image 修饰符表示只对图片类型的请求生效。

4. 放行规则(Allowlisting)

用于放行被其他规则(包括内置列表或您自己的其他规则)错误阻断的内容。放行规则以 @@ 开头。

  • 放行特定域名: @@||goodservice.com^

    放行 goodservice.com 及其子域名的所有请求。
  • 放行特定路径的脚本: @@||example.com/important_script.js^$script

    放行 example.com 上名为 important_script.js 的脚本文件,即使它可能被其他规则拦截。
  • 放行特定网站的元素: @@example.com##.ad-placeholder

    example.com 网站上,即使有规则试图隐藏 .ad-placeholder 元素,这条规则也会阻止其隐藏。

5. 修改规则(Modifier)

修饰符可以添加到规则的末尾,通过 $ 符号分隔,用于进一步限定规则的适用范围或行为。

  • $script:仅对脚本请求生效。
  • $image:仅对图片请求生效。
  • $popup:仅对弹出窗口请求生效。
  • $domain=example.com|another.com:仅在指定的域名上应用规则。
  • $badfilter:用于禁用某条内置过滤器中的规则(通常用于解决误伤)。例如,||example.com/bad_resource.js^$badfilter 会禁用内置列表中拦截 bad_resource.js 的规则。
  • $important:提高规则的优先级,使其能覆盖其他规则。例如,##.annoying-popup$important 确保即使有其他规则尝试显示这个弹窗,它也会被隐藏。

6. JS 注入规则(Scriptlet Injection)

这是 AdGuard 的高级功能,允许在页面加载时注入自定义的 JavaScript 代码。常用于绕过反广告机制、修改页面行为或修复网站兼容性问题。

  • 基本格式: example.com#%#//scriptlet("规则名称")

    例如:example.com#%#//scriptlet("adguard-javascript-anti-adblock") 会在 example.com 上注入 AdGuard 提供的反反广告脚本。
  • 自定义脚本: 也可以注入您自己编写的 JavaScript 代码。这需要对 JavaScript 有一定了解。

注意事项:

编写规则时,请务必尽量具体和精确,避免使用过于宽泛的规则,这可能导致误伤或影响页面正常功能。例如,`##div` 会隐藏页面上所有的 `div` 元素,这显然是不正确的。

使用 AdGuard 浏览器扩展的“元素阻断器”是初学者编写元素隐藏规则的最佳起点,它能自动生成准确的 CSS 选择器。

AdGuard 规则的工作原理与性能考量

理解 AdGuard 规则是如何被处理的,有助于更好地编写和优化它们。

规则的匹配与执行顺序

当您访问一个网页时,AdGuard 会在幕后执行一系列复杂的步骤来处理规则:

  1. DNS 请求拦截(如果是 AdGuard DNS/Home): 最先进行的是 DNS 层级的过滤。如果某个域名被 DNS 规则阻断,那么相关的请求甚至不会到达您的设备。
  2. 网络请求拦截(流量过滤): 对于通过 HTTP/HTTPS 发出的所有网络请求(图片、脚本、CSS、字体等),AdGuard 会检查它们是否与任何阻断规则匹配。匹配的请求会被直接终止,不会被浏览器加载。
  3. CSS 元素隐藏: 针对元素隐藏规则(如 ##.ad-banner),AdGuard 会向浏览器注入自定义的 CSS 样式,将匹配的元素设置为 display: none;visibility: hidden;。这些元素仍然会加载,但用户不可见。
  4. HTML 内容过滤: 在某些情况下,AdGuard 会直接修改页面的 HTML 内容,在元素渲染前移除或修改它们。
  5. 脚本注入: 对于 JS 注入规则,AdGuard 会在页面加载过程中或特定事件触发时,将指定的 JavaScript 代码注入到网页环境中执行。

优先级: 通常,用户自定义规则的优先级高于内置过滤列表。放行规则 (@@) 的优先级最高,可以覆盖所有阻断规则。带有 $important 修饰符的规则也拥有较高的优先级。

规则数量对性能的影响

理论上,AdGuard 可以处理非常大量的规则。然而,规则的数量和复杂度确实会对性能产生影响:

  • CPU 占用: 每条规则都需要被解析和匹配。规则越多,匹配过程消耗的 CPU 资源就越多。
  • 内存占用: 规则列表需要存储在内存中,庞大的规则集会占用更多的内存。
  • 页面加载速度: 虽然 AdGuard 的过滤引擎经过高度优化,但规则匹配和内容修改仍然需要时间。极端庞大的规则集可能会轻微延长页面加载时间。

对于大多数日常使用而言,即使启用全部内置列表并添加少量自定义规则,性能影响也微乎其微。只有在同时订阅了数十个庞大且复杂的第三方列表,并且添加了成百上千条个人规则时,才有可能感受到轻微的性能下降。

如何优化规则以提升效率?

  • 精简规则: 定期审查您的自定义规则,删除不再需要或已经被内置列表覆盖的冗余规则。
  • 避免冗余: 尽量避免添加与现有过滤列表功能重叠的规则。如果内置列表已经能解决问题,就没有必要重复添加自定义规则。
  • 使用精确规则: 尽可能使用精确的规则(例如,example.com##.specific-ad 而不是 ##.generic-ad),特别是当您只需要在特定网站上应用规则时。精确的规则匹配效率更高,误伤几率更小。
  • 避免过于宽泛的通配符: 过多的通配符(*)或过于简单的路径匹配可能会导致大量不必要的匹配尝试。
  • 检查日志: 定期查看 AdGuard 的过滤日志,了解哪些规则被频繁触发,以及是否存在不必要的拦截或放行。

如何有效排查与调试 AdGuard 规则?

在编写自定义规则时,规则可能不生效或造成误伤,此时需要进行有效的排查。

1. 使用过滤日志

AdGuard 提供了详细的过滤日志,这是排查问题的首要工具。

  • 桌面应用/AdGuard Home: 在 AdGuard 应用或 AdGuard Home Web UI 中,找到“过滤日志”或“查询日志”选项。
  • 浏览器扩展: 点击 AdGuard 扩展图标 -> “显示过滤日志”。

在日志中,您可以实时看到每个网络请求的状态(被阻断、被放行、被修改等)以及是哪条规则对其产生了作用。如果某个元素没有被隐藏,您可以检查对应的网络请求或元素是否存在,并查看是否有规则试图隐藏它。

2. 浏览器开发者工具

浏览器自带的开发者工具(通常通过 F12 键打开)是调试网页内容的强大助手。

  • 检查元素: 使用“元素”选项卡检查网页上的 HTML 结构和 CSS 样式。您可以找到目标元素的 ID、Class 名称或其他属性,这些是编写元素隐藏规则的关键。查看元素的“计算样式”或“样式”面板,可以确认是否有 AdGuard 注入的 display: none; 样式。
  • 网络请求: 使用“网络”选项卡查看所有发出的网络请求。如果某个广告或跟踪请求没有被拦截,它会出现在这里。您可以复制其 URL,然后尝试编写针对该 URL 的阻断规则。
  • 控制台: 如果涉及 JavaScript 注入规则,可以在“控制台”中查看是否有错误信息。

3. 逐步禁用与测试

当您遇到问题时,可以尝试以下步骤:

  1. 禁用所有自定义规则: 如果问题消失,说明问题出在您的自定义规则中。
  2. 逐步启用/禁用单个规则: 逐条开启或关闭您的自定义规则,或内置过滤列表,以找出导致问题的具体规则。
  3. 在无痕模式或新配置文件中测试: 排除浏览器缓存或其他扩展的干扰。

掌握 AdGuard 规则的使用,意味着您将获得对在线浏览体验的空前控制力。无论是精准去除广告、隐藏不必要元素,还是绕过反广告机制,自定义规则都将是您最有力的武器。通过持续的学习、实践和调试,您将能够打造一个真正属于自己的、干净、高效、安全的网络环境。


adguard规则