根域名级拦截——阻止整个域名树的一切子域名
核心创新
普通浏览器的广告拦截(如 uBlock、AdGuard)基于域名列表——每个域名一条规则。但广告生态会不断换子域名:
- 今天用
ads.example.com - 明天换成
tracker1.example.com - 后天是
cdn2.example.com
需要不断更新拦截列表才能跟上。
uWeb 的根域名级拦截方案是:一条规则,屏蔽整个根域名下的一切子域名、孙域名、曾孙域名……根域名一挡,所有子域名的不良信息一网打尽。
原理
default.hosts 配置
根域名级拦截配置在 default.hosts 文件里。每一行一个根域名前缀,支持正则表达式。
ads\.example\.com
tracker\.ad-network\.net
第一行会拦截:
ads.example.comsub.ads.example.comany.level.ads.example.com- 任何以
ads.example.com结尾的域名
"根域名前缀"匹配机制
根域名前缀匹配比普通域名匹配更激进:
- 只要请求域名以配置的根域名结尾,就被拦截
- 不管中间有多少子域名层级
与普通 hosts 文件的区别
| 特性 | 系统 hosts 文件 | uWeb default.hosts |
|---|---|---|
| 匹配方式 | 精确域名 | 根域名前缀匹配 |
| 子域名覆盖 | 需要逐条列出 | 自动覆盖所有子域名 |
| 规则数量 | 通常几万~几十万条 | 几百~几千条就够 |
| 更新频率 | 需要频繁更新 | 更稳定 |
配置方法
- 打开 default.hosts 文件(在配置目录下)
- 每行一个根域名正则表达式(Java 语法,转义点号)
- 强制清空后台重启 uWeb
示例配置
# 屏蔽所有与 ads.com 相关的域名树
ads\.com
# 屏蔽 tracker 相关的整棵树
.*tracker.*\.net
# 屏蔽常见广告域名
doubleclick\.net
googlesyndication\.com
googletagservices\.com
配合 sitejs 的双正则方案
官方文档推荐了"双正则表达式根域名隐藏"策略——用两层规则确保不良信息彻底消失:
- 根域名前缀拦截(default.hosts):网络层面不让请求出去
- 特定网站 CSS/JS 屏蔽(sitecss/sitejs):对那些已经加载但显示不良信息的元素进行 DOM 层面的隐藏
两者配合效果最好——第一层拦住大部分广告资源,第二层处理那些"漏网"的。
标记不良元素生成 CSS
长按底部工具栏 JS 按钮 → "标记不良元素" → 点击页面上的广告/弹窗元素:
- 弹出对话框显示该元素及所有祖先的属性
- 自动生成 CSS 屏蔽代码
- 默认用
display:none,如果祖先里已经有 display 属性则建议用transform:scale(0)!important
生成的 CSS 可以直接保存到 sitecss/ 下对应该域名的 .css 文件里。
配合临时书签工具快速添加
你可以用 bookmarklet 目录下的"列出外部脚本"小书签来生成外部 JS 列表:
- 在有广告的页面执行这个小书签
- 列出页面引用的所有外链脚本
- 长按可疑链接(域名不同的外链)→ 执行"屏蔽根域名"
- 一键把该脚本所属的根域名加入 default.hosts
注意事项
- 根域名前缀匹配比较激进,不小心可能屏蔽正常资源。建议从少量规则开始测试,逐步添加
- 某些网站把静态资源托管在第三方 CDN 上(如 jsDelivr、unpkg),如果拦截根域名会导致网站白屏
- default.hosts 只屏蔽根域名的网络请求,不影响本地/HTTPS/同一根域名下的主站内容