Clash Verge Rev 规则集教程:从内嵌规则到远程更新
用 rule-providers 管理域名和 IP 列表,正确连接规则集、分流目标与更新路径。
本页目录
什么时候需要规则集
只有几个域名需要调整时,用自定义规则
更直接。需要维护几十上百条同类域名,或者希望一份列表定期更新时,再使用 rule-providers。规则集保存匹配条件,代理组决定匹配之后去哪里,两者不能互相代替。
先确保订阅已经可以正常联网,并备份当前配置。下面先用一个完全本地的内嵌规则集练习,不依赖任何远程下载,也不会动节点凭据。
第一步:添加内嵌规则集
打开「订阅」,右键当前订阅进入「编辑扩展配置」。加入以下片段,保存并应用该订阅:
rule-providers:
local-example:
type: inline
behavior: classical
payload:
- DOMAIN,example.com
- DOMAIN-SUFFIX,example.org
local-example 是自定义的规则集名称,后面引用时必须完全一致。classical 的条目是带规则类型的匹配条件,这里不写最终的 DIRECT 或代理组名称;分流目标放在下一步的 RULE-SET 引用中。
第二步:让规则集参与分流
回到当前订阅的「编辑规则」,在前置规则里增加:
RULE-SET,local-example,DIRECT
保存并重新应用订阅。打开「设置 → 当前配置」,同时找到 rule-providers.local-example 和 rules 中的这条引用。只定义规则集不会自动使用它,只有引用没有定义也不能正常工作。
这里用 DIRECT 演示,方便观察。要把这组域名交给代理,替换为当前配置里实际存在且大小写一致的代理组名称。使用前置规则是为了避免被前面的宽泛规则提前命中;不要把它加到 MATCH 后面。
第三步:验证规则命中
- 确认当前运行模式为规则模式。
- 重新访问
https://example.com/,不要只刷新一条已经复用的长连接。 - 在连接页面找到这个域名,查看命中的规则及出站链路。
- 将测试域名替换为你实际需要管理的域名,再重复检查。
如果显示命中了其他规则,检查顺序;如果规则集不存在,检查名称、缩进以及当前订阅;如果命中了正确规则却访问失败,再检查目标出站是否可用。规则命中正确与网站一定可访问是两件事。
改成远程规则集
准备好你自己维护或已审查的规则文件后,可以把内嵌定义替换为下面的形式。example.com 地址是待替换的示例,不能当成已经存在的下载服务。
rule-providers:
local-example:
type: http
behavior: classical
format: yaml
url: https://example.com/my-rules.yaml
path: ./ruleset/local-example.yaml
interval: 86400
proxy: DIRECT
远程 my-rules.yaml 内容应为:
payload:
- DOMAIN,example.com
- DOMAIN-SUFFIX,example.org
interval 单位为秒,86400 是一天;path 是内核配置目录内的缓存相对路径,每个规则集使用不同文件。proxy: DIRECT 表示下载规则集时直连,不是这些业务域名全部直连。如果远程地址必须代理才能访问,可以选用当前配置存在的代理组,但不要让获取规则所需的唯一节点又依赖这份尚未下载的规则。
behavior 和文件格式别混用
| behavior | 文件里写什么 | 适用场景 |
|---|---|---|
| classical | DOMAIN,example.com 这类规则条件 | 混合多种匹配方式 |
| domain | 按 domain 规则集语法写域名 | 大量域名列表 |
| ipcidr | IP/CIDR 条目 | IP 网段集合 |
format 的 yaml、text、mrs 也必须对应文件实际内容。mrs 不是把扩展名改一下就得到的格式,而且目前只支持 domain/ipcidr,不能给 classical 任意套用。
更新失败和恢复
出现下载错误时,先检查远程 URL 能否返回预期内容,再核对认证、下载所用代理、缓存路径和文件格式。HTTP 200 只证明取得了响应,不证明取得的是规则;登录页或错误 HTML 也可能返回 200。
临时不用某个规则集时,先移除前置的 RULE-SET 引用,再移除扩展中的定义,重新应用订阅并观察日志。不要直接删除整个配置目录。如果只是远程源故障,可恢复内嵌版继续使用,等远程文件验证正确后再切回。