uWeb 中文文档 下载 App

正则表达式屏蔽——url.deny 精细控制

default.hosts 的局限性

default.hosts 基于根域名前缀匹配,粒度较粗。有时你需要更精细的控制:

这时候就需要 url.deny。

url.deny 文件

url.deny 使用 Java 正则表达式语法,比 default.hosts 更灵活。配置特点:

格式示例

# 屏蔽所有 banner 相关图片
.*banner.*\.(png|jpg|gif)$

# 屏蔽特定域名下的 /track/ 路径
example\.com/track/.*

# 屏蔽带广告参数的 URL
.*[?&]utm_(source|campaign|content)=.*

匹配对象

url.deny 匹配的是完整 URL 字符串,包括:

所以正则可以自由匹配任何部分。

与 default.hosts 的配合关系

场景用 default.hosts用 url.deny
整个域名树屏蔽✅不如 hosts 方便
精细路径控制❌✅
需要注释❌✅
多行正则❌✅
跨域名模式❌✅

两者配合使用效果最好:

Java 正则注意事项

urldeny 使用 Java 的 Pattern.compile() 语法,与 JavaScript/Python 有些差异:

特性Java 正则与 JS 的差异
转义点号\.和 JS 一样
字符类[abc]一样
量词*, +, ?, {n,m}一样
分组(...)一样
非捕获分组(?:...)一样
边界\b, \A, \Z类似
DOTALL需要 Pattern.DOTALLJS 用 s flag
MULTILINE需要 Pattern.MULTILINEJS 用 m flag

如果不确定正则是否正确,建议先在本地用 Java Pattern 测试,或者先用最简单的形式测试。

实用规则示例

屏蔽常见广告追踪参数

# 屏蔽所有带 utm_* 追踪参数的 URL
[?&]utm_[a-z]+=.*

# 屏蔽带 fbclid 的 Facebook 追踪链接
[?&]fbclid=.*

# 屏蔽带 gclid 的 Google AdWords 追踪
[?&]gclid=.*

屏蔽特定路径

# 屏蔽 example.com/ads/ 下的一切资源
example\.com/ads/.*

# 屏蔽 example.com 域名下的 banner 图片
example\.com.*banner.*\.(png|jpg|jpeg|gif|webp)

屏蔽某些统计脚本

# 屏蔽常见统计域名下的脚本
.*(analytics|stat|tracking|count)\..*\.js$

与信息隐藏体系的关系

url.deny 是 uWeb 信息隐藏技术的一部分,官方文档总结的完整隐藏方案包括:

  1. 网络层面:default.hosts 根域名拦截 + url.deny 精细路径拦截
  2. DOM 层面:sitecss/sitejs 针对特定网站的元素屏蔽(CSS display:none 或 transform:scale(0))
  3. 浏览模式:长按窗口管理 → 仅图片/仅视频/禁用伪元素/禁用 iframe
  4. 全屏无干扰:长按 ☰ → 自动全屏播放(视频场景)
  5. 资源层面:长按 ☰ → 隐藏浮动信息、移除横幅、清空定时器、中断可疑事件
  6. JS 层面:长按设置 → 拦截外链脚本(配合 js.allow 白名单)
  7. 硬开关:直接关闭图像或关闭 JS

下一章