如何撰写例外规则

例外规则的功能主要就是用来纠正普通的拦截规则造成的误杀,比如我们写了一条通用规则可以拦截大部分情况下的广告。但是在个别情况下造成了对正常内容的误杀,这时候我们就可以添加一条例外规则避免对正常内容的误杀。

URL拦截例外规则

“@@”作为URL拦截例外规则的标识,后面紧跟普通的URL拦截规则

举个例子,比如我们写了下面一条URL拦截规则

/path/of/ad*

这时候下面类似下面这些资源URL会被命中

https://www.example.com/path/of/ad/banner.js
https://www.example.com/path/of/ad-show.js
https://www.example.com/path/of/advanced/

但是最后一条资源URL是正常的资源内容,因为规则”/path/of/ad*” 被误杀,这时候我们就可以新增一条例外规则来避免正常的资源URL被误杀。

@@www.example.com/path/of/advanced/

这条例外规则就解决了资源上面提到的误杀问题,我们可以看到例外规则的写法很简单,就是以 “@@” 紧跟一条普通的URL规则,只不过这个URL规则不是用来匹配广告的,而是用来匹配一个被误杀的正常资源。

通常情况下,例外规则还会加入特定域名的约束,比如下面这条规则

@@/path/of/advanced@example.com

这条例外规则只在当前二级域名为 “example.com”的站点才会生效。

@@/path/of/advanced$domain=example.com

等价于上面一条列外规则,这是ABP规则的写法。

隐藏元素例外规则

“@#”作为隐藏元素例外规则的标识,后面紧跟普通的隐藏元素规则

隐藏元素的例外规则是针对全局规则的,举例说明,比如下面这条全局的隐藏元素规则。

##div[title*="ad"]

网站 www.example.com 中存在下面个页面元素会被误杀

<div tilte="advanced">
some content
</div>

这时候我们只要添加下面这条例外规则就可以避免被误杀

@#div[title*="ad"]@example.com

等价的ABP语法如下

example.com#@#div[title*="ad"]