简化privoxy重定向语法
阿呆喵v3.1.8及以上版本支持,可直接写入自定义规则文件:user.txt
增加 $pass 属性, 表示本链接直接转发
www.baidu.com/link?url=*$pass
$block $403 均表示返回403 结果
增加 f@s@、f@302:s@、m@[url]、m@res:[doc]、m@302:[url] 语法
直接请求跟随的地址, 不通过302来实现
m@ 类似于privoxy {+redirect{mhttp://www.admflt.com/doc/iqiyi.swf}}
|http://www.youku.com/|$m@http://www.youku.com/index.html
通过302返回doc目录下的资源
$m@res:test.html
通过302重定向到目标地址
$m@302:http://www.baidu.com/
f@s@ 类似于 {+redirect{f@aaaaa@bbbb@}}
|http://static.youku.com/v/swf/qplayer.swf$f@s@aaaaaa@bbbbb@
f@302:s@ 通过302 来返回修正过的url;
|http://static.youku.com/v/swf/qplayer.swf$f@302:s@aaaaaa@bbbbb@
例:
!@@||www.baidu.com/link?url=*$pass
!|http://www.youku.com/|$m@res:test.html
!|http://www.youku.com/|$m@302:http://www.baidu.com/index.html
!|http://www.youku.com/|$m@http://www.baidu.com/index.html
!||atm.youku.com/*&p=$f@s@&p=\d{1,2}\b@&p=0@
!||atm.youku.com/*&p=$f@302:s@&p=\d{1,2}\b@&p=0@
规则优先级 f@s@ == m@[url] == m@res:[doc] == m@320:[url] > block(拦截)
CSS选择器优先级
为什么有的规则明明写的对而广告并没有隐藏掉,这就涉及到CSS选择器的优先级问题,如感兴趣详细了解的话可以用搜索引擎搜一下关于“CSS选择器优先级”的文章,下面简单说明CSS选择器优先级:
!important>行内样式(style)>ID选择器(#)>类选择器(class)>标记选择器(tag)>*
例如:
<div id="egid" class="egclass" style="display:block!important">...........</div>
!important优先级是最高的,而行内样式优先级也很高,如果是行内样式加上!important那就是“至高无上”的了,所以这类广告无法通过#id或.class来隐藏,只有通过文本替换换掉行内样式才可以。或直接把行内样式替换成display:none!important。
如何添加白名单
@@|http://$domain=xxxxx
▲域名白名单,例:@@|http://$domain=baidu.com
▲解除|http:// 或 |https:// 或 || 及隐藏元素屏蔽
@@|http://xxxxxx
▲资源白名单,例:@@|http://baidu.com/js/adv.js
▲解除|http:// 或 |https:// 或 || 屏蔽
#@#
▲元素白名单,例:||www.baidu.com#@#.advmain
▲解除元素隐藏屏蔽
S:[host]
▲https白名单,例:S:jd.com
▲https白名单域名全部放行,包括证书
@@|http://xxxx$pass或@@|https://xxxx$pass或@@||xxxx$pass
▲转发规则,不过滤只进行转发运用,例:@@||www.baidu.com$pass
▲没什么好说的,解除除证书外的一切过滤
ADM下privoxy语法规则
ADM中可以使用privoxy的部分规则语法,目前还支持部分,大部分都已不支持。
找到ADM的规则订阅目录%appdata%\adm\subscribe【注1】,建立一个名为priv_user.txt的文件,文件编码用ANSI【注2】,在此文件写ADM所支持的privoxy规则。
【注1】如果没有改过ADM数据目录路径的话,比如绿色化,如果更改了请到更改后的数据目录下找。
【注2】windows记事本或其他三方文本编辑软件如Editplus在另存的时候都有保存编码选项,选择ANSI保存。
privoxy的规则属于额外增强语法,主要作用:重定向链接、反盗链、改UA。下面举几个例子,#开头的为注释行,在规则中不起作用,只是说明,为了便于自己和他人的理解。
重定向例:
#访问v.youku.com/v_show/触发规则定向到www.renren66.com/play/vvid_
{+redirect{s@http://v.youku.com/v_show/@http://www.renren66.com/play/vvid_@}}
v.youku.com/v_show/
#重定向的网址匹配也可以是正式表达式
#可以用^开始起始,用$表示结尾,最后可以写上匹配符(参数)
{+redirect{s@(http:\/\/virtual\.domain\.com.*forkads.*)t=\d*(.*)@$1t=0$2@is}}
virtual.domain.com
#重定向优酷到iqiyi
{+redirect{http://www.iqiyi.com/}}
www.youku.com
修改Referer【注3】例:
【注3】简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
#使用当前浏览页面做为Referer
{+hide-referrer{forge}}
.pixiv.net
#去除Referer
{+hide-referrer{block}}
.pixiv.net
#伪造Referer网址
{+hide-referrer{http://hi.baidu.com}}
.bdimg.com
修改浏览器UA【注4】例:
【注4】UA(User Agent):User Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。通俗地讲,UA是一种向访问网站提供你所使用的浏览器类型、操作系统、浏览器内核等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版,从而为用户提供更好的体验或者进行信息统计。例如,百度、新浪等网站用手机访问和电脑访问是不一样的,这是因为网站根据访问者的UA判断后,进行了不同的设置和处理。
#UA模拟Android浏览器
{+hide-user-agent{Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-N7100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30}}
.iqiyi.com
.letv.com
自定义规则写法
ADM支持绝大数的ABP规则语法,基本规则基于ABP规则,并进行了字符替换部分的扩展。
ABP规则请参考:
CSS选择器参考:
"!" 为行注释符
注释行以该符号起始作为一行注释语义,用于规则描述。
"|" 为管线符号
来表示地址的最前端或最末端 比如 "|http://" 或 |http://www.abc.com/a.js|,用于精确控制匹配的开始或结束。e.g:|http://www.abc.com等于|http://www.abc.com*,可以匹配以http://www.abc.com开头的网址。
"||" 为子域通配符
方便匹配主域名下的所有子域。比如 "||www.baidu.com" 就可以不要前面的协议"http://"。e.g:||www.abc.com等于*www.abc.com*,只要网址中包含www.abc.com就可以被匹配。
"~" 为排除标识符
通配符能过滤大多数广告,但同时存在误杀, 可以通过排除标识符修正误杀链接。
"@@" 网址白名单
例如不拦截此条地址 @@|http://www.baidu.com/js/u.js或者 @@||www.baidu.com/js/u.js
"*" 为字符通配符
能够匹配0长度或任意长度的字符串。
"^" 为分隔符
可以匹配任何单个字符。
"##"、"#@#"、"##&" 这3种为元素插入语法
在语句末尾加 $B , 可以选择插入css语句在</body>前, 默认为</head>,CSS放在head和body没有区别,但要注意最后面的CSS定义样式会覆盖前面的(相同权重级别情况下),CSS权重:style > id > class > element。
"##" 为元素选择器标识符
后面跟需要隐藏元素的CSS样式例如 #ad_id .ad_class,只要写上CSS选择器,ADM程序会自动在后面加上{display:none!important}隐藏的样式。
"#@#" 元素选择器白名单
可以指除指定元素避免程序在加上隐藏的样式。
"##&" 为JQuery选择器标识符
后面跟需要隐藏元素的JQuery筛选语法, 如 ##&div:has(p),也可以写像##一样的普通元素选择器,这类的规则为加强版的规则,可以避免源网页的元素定义的元素样式比所写的选择还要高导致隐藏样式{display:none!important}失效。
"##%" 是ADM自有的一种语法
经过这种语法插入的选择器程序不会在选择器后面加上{display:none!important}的隐藏样式,需要自己写{}中的样式部分,用于修正隐藏后的移位、留白等问题。如:##%.main{width:200px;height:50px;margin-top:-20px}
全局元素隐藏
元素隐藏支持全局规则##.ad_text不需要前面配置域名,对所有页面有效。简单有效,但误杀会比较多,慎用!
"$s和$S" 为文本替换标识标
格式为:域名$s@查找内容@替换内容@后缀选项,大S和小S的不同之处是小s为普通的通配符替换(?表示任意1个字符,*表示任意多个字符),大S为正则表达式替换,可以通过正则表达式来灵活的查找内容。注意使用此语法替换时一定要事先测试好正则表达式或十分确定正则表达式的正确,如稍有不慎造成循环等错误会导致程序CPU占用升高,ADM退出、卡死等错误。
"@@" 为全局白名单
可以排除某网站整站或某网站目标脚本的拦截,如@@|http://$domain=.baidu.com|、@@|http://www.baidu.com/js/ads.js
"S:" 为https域名白名单
白名单的域名ADM只会转发,不会进行拦截过滤,如S:jd.com、S:taobao.com