首页和详细教程里都提到了"规则分流",也各给了一段示例,但都是点到为止。这篇文章把规则文件里最常见的几种匹配类型、它们的匹配顺序,以及新手最容易写错的几个地方,按实际例子完整过一遍。
Shadowrocket 连接之后,默认可以选择让「所有流量」都走代理节点,这种模式最省心,但也最浪费——国内网站本来直连就能访问,绕一圈经过节点反而更慢,还占用节点的带宽额度。规则文件要解决的就是这一件事:把不同的网络请求,按域名或 IP 分别判断该走「直连」还是「代理」,而不是所有流量一刀切。
规则文件本质上是一份纯文本清单,每一行是一条规则,格式统一是:
类型,匹配内容,策略
Shadowrocket 从上到下逐行读取这份清单,某个网络请求命中了哪一行,就按那一行末尾写的策略处理,命中即停止,不会继续往下比对。
「类型」决定了这一行规则按什么维度去匹配请求,最常用的几种如下:
| 类型 | 匹配对象 | 示例 | 说明 |
|---|---|---|---|
| DOMAIN | 完整域名,精确匹配 | DOMAIN,www.example.com,PROXY | 只匹配这一个域名,子域名或其他前缀都不算命中 |
| DOMAIN-SUFFIX | 域名后缀 | DOMAIN-SUFFIX,google.com,PROXY | 匹配 google.com 及其所有子域名(如 mail.google.com、scholar.google.com) |
| DOMAIN-KEYWORD | 域名中包含的关键字 | DOMAIN-KEYWORD,youtube,PROXY | 只要域名里出现这个关键字就命中,范围比后缀匹配更宽,容易误伤,谨慎使用 |
| IP-CIDR | IP 地址段 | IP-CIDR,192.168.0.0/16,DIRECT | 按 IP 段匹配,常用于内网地址、特定服务器 IP |
| GEOIP | IP 所属国家/地区 | GEOIP,CN,DIRECT | 按目标服务器的地理位置判断,CN 代表中国大陆,通常用来兜底"国内 IP 直连" |
| FINAL | 没有匹配到以上任何一条时的默认策略 | FINAL,PROXY | 必须放在规则文件最后一行,作用是"其余情况怎么处理" |
策略部分(逗号后面的最后一项)通常是 PROXY(走代理节点)、DIRECT(直连)或 REJECT(拒绝连接,常用于屏蔽广告域名)。
这是规则文件里最容易被忽略、也最关键的一点:规则是按顺序从上到下逐条比对的,一旦某一行命中就立即按那一行的策略处理,不会继续往下看。这意味着规则的先后顺序会直接影响结果,即使后面还有更"精确"的规则,只要前面已经有一行命中了,后面的就不会被执行。
一个完整、可以直接理解的示例:
DOMAIN-SUFFIX,google.com,PROXY
DOMAIN-SUFFIX,csdn.net,DIRECT
DOMAIN-KEYWORD,youtube,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY
按这份规则,访问 scholar.google.com 会命中第一行(域名后缀是 google.com),走代理;访问 blog.csdn.net 命中第二行,直连;访问路由器管理页面 192.168.1.1 命中第四行,直连;访问一个域名信息未知、但服务器 IP 属地在中国大陆的网站,会一路走到第五行 GEOIP 判断为直连;如果前面所有规则都没命中(比如一个海外小众网站,域名和 IP 都不在前面几条里),最终落到 FINAL,PROXY,走代理兜底。
FINAL 代表"以上都没匹配到时怎么处理",如果写在中间,它后面的所有规则都会变成永远不会被执行的"死代码",因为请求只要到了 FINAL 这一行就已经被处理并停止比对了。FINAL 必须放在文件的最后一行。
关键字匹配的范围比想象中宽,比如 DOMAIN-KEYWORD,ads,PROXY 不仅会匹配广告域名,也可能误伤域名里恰好包含 "ads" 这几个字母的正常网站。优先用 DOMAIN-SUFFIX 精确匹配已知域名,只有在确实需要覆盖大量相似域名、且能接受一定误伤范围时才用关键字匹配。
部分海外网站会把加速节点部署在中国大陆的 CDN 上,如果 GEOIP,CN,DIRECT 这条规则排在前面,这类网站可能被误判为"国内 IP"直接放行,反而访问不到真正想要的海外内容。通常建议把明确需要代理的域名规则放在前面,GEOIP 判断放在比较靠后的位置。
如果编辑的是本地手动维护的规则文件,保存后一般会立即生效;如果用的是订阅形式的规则集,需要重新触发一次更新(进入对应订阅条目点「更新」),本地缓存的旧规则不会自动刷新。
大部分订阅服务商会同时提供一份配套的规则集,导入即可使用,不需要从这篇文章的示例重新敲一遍。这篇文章的目的是帮你看懂规则文件里每一行在做什么,方便你在别人写好的规则基础上做局部调整(比如新增一个想直连的国内网站),而不是要求每个人都从零开始编写。
说明:本文规则语法基于 Shadowrocket 官方使用手册与实测整理,不同版本对规则类型的支持可能略有差异,请以你所用版本的实际支持情况为准。
延伸阅读:返回首页:Shadowrocket 是什么 · 进阶规则配置教程