Shadowrocket 分流规则怎么写?常用类型与匹配逻辑

一句话回答:一条规则由条件类型、匹配值与策略三部分组成,例如把 example.com 的所有子域名设为直连;规则自上而下匹配,命中即停止,越具体的规则应放在越前面。

要点速览
  • 规则的三个要素:条件类型(按什么匹配)、匹配值(匹配谁)、策略(直连或代理)。
  • DOMAIN-SUFFIX 覆盖该域名及其全部子域名,是最常用也最省事的类型。
  • 规则按顺序匹配,命中第一条后不再继续,具体规则要写在宽泛规则之前。
  • 改完规则先测一个已知域名验证走向,再投入日常使用。

写规则不难,难的是理解匹配顺序。把顺序弄清楚,规则就从不生效变成了可预期。

一条规则由什么组成

规则的结构是固定的:条件类型决定按什么维度匹配,匹配值给出具体内容,策略决定命中后走直连还是代理。三者之间用逗号分隔。

例如要让某个域名的所有子域名都走直连,使用后缀类型并把策略设为直连即可;要让单个域名走代理,使用完整域名类型。

常用规则类型对照
类型匹配对象典型用途精确度
DOMAIN-SUFFIX域名及所有子域名整站与其 CDN 资源较高
DOMAIN完整域名精确到单个主机最高
IP-CIDRIP 地址段不走域名的程序取决于段大小
GEOIP归属地区按地区批量处理依赖地区库
USER-AGENT应用标识按客户端区分可被伪造

匹配顺序决定最终走向

客户端从上到下逐条比对,一旦命中就采用该条策略并停止比对。因此把一条宽泛规则写在前面,会让后面的具体规则永远没有机会生效。

实际维护时的经验是:先写精确的完整域名规则,再写后缀规则,最后写地区与兜底规则,形成由细到粗的结构。

  • 同一域名既有完整域名规则又有后缀规则时,把完整域名规则放在前面。
  • 兜底规则放在最后,用于处理前面都没命中的流量。
  • 定期清理失效规则,规则过多会拖慢匹配速度,也让排障变得困难。

从写到生效的流程

在配置中找到规则部分,新增一行并填写类型、值与策略,保存后回到首页重新连接一次让配置生效。

生效验证很简单:挑一个受该规则影响的域名,看它的实际走向是否符合预期;不符合时检查是否有更靠前的规则先命中了它。

获取规则分流客户端

规则写法的高频疑问

规则改了为什么没生效?

常见原因有三个:规则顺序被前面的条目抢先命中、改完没有重新连接、改动的是另一份未被启用的配置。按顺序核对这三项通常能解决。

可以用通配符吗?

后缀类型本身就能覆盖全部子域名,多数场景不需要通配符;过度使用通配符容易误伤同后缀的其他站点。

规则数量有上限吗?

没有硬性上限,但条目过多会增加匹配开销并降低可维护性。建议按用途分组管理,定期合并重复条目。