Skip to content

Rules and Rulesets

Aethersailor edited this page Aug 15, 2026 · 4 revisions

📜 规则与规则集

SubConverter-Extended 可以使用传统 ruleset 定义、Clash/Mihomo 原生 Rule Provider,以及外部完整 Clash 规则。

基本规则集配置

TOML 示例:

[ruleset]
enabled = true
overwrite_original_rules = true
update_ruleset_on_request = false

[[rulesets]]
import = "snippets/rulesets.toml"

INI 使用 [rulesets] 段和重复的 ruleset= 项。YAML 使用相应序列。

原生 Clash/Mihomo Provider

常见类型:

  • clash-domain::域名规则;
  • clash-ipcidr::IP CIDR 规则;
  • clash-classic::经典完整规则。

直接 Provider URL、由 /getruleset 转换的 URL 和内联展开具有不同输出。不要仅根据 .txt 后缀猜测最终内容格式。

no-resolve

INI 在更新间隔后追加:

ruleset=🎯 全球直连,clash-ipcidr:https://example.com/cn-ip.yaml,28800|no-resolve

不要增加第四个逗号字段:

# 错误:会破坏传统解析
ruleset=🎯 全球直连,clash-ipcidr:https://example.com/cn-ip.yaml,28800,no-resolve

TOML/YAML 使用 options 序列。适用范围:

  • 非 Script Clash/Mihomo 输出;
  • clash-ipcidr
  • Provider 和内联展开的 IPv4/IPv6 规则。

clash-domainclash-classic、Script 模式和非 Clash 目标会忽略该选项并记录警告。

外部完整规则

ruleprepend / ruleappend 是 SubConverter-Extended 扩展语法。

[custom]
ruleprepend=https://example.com/first.list
ruleappend=https://example.com/last.yaml

来源可以是:

  • 每行一条完整规则的纯文本;
  • 根节点为 rules: 序列的 YAML。

不支持:

  • 根节点为 payload: 的 Provider 内容;
  • 导入 MATCHFINAL 终止规则;
  • 本地文件和 data URL;
  • target=clashr
  • list=true
  • script=true

最终顺序

ruleprepend
基础模板中的非终止规则
生成的非终止规则
ruleappend
基础模板和生成的 MATCH / FINAL 尾部

多个来源和来源内部规则保持声明顺序,不自动去重。overwrite_original_rules=true 只移除基础模板原有规则,不移除 ruleprependruleappend 或正常生成的规则。

失败语义

  • 网络失败、非成功 HTTP 状态或空响应:记录并跳过当前外部完整规则来源,继续处理后续来源;
  • 已下载内容无法解析或包含无效规则:转换返回 HTTP 400;
  • 规则数量、来源数量和下载大小:受 advanced 资源限制控制;
  • 请求方可控 URL:受安全档位的 SSRF 策略控制。

/getruleset

生成配置可能通过 /getruleset 把远程规则转换成目标格式。该接口的 typeurlgroup 由生成器构造,通常无需手动调用。

OpenClash 后续覆写

OpenClash 下载配置后仍可能在 LuCI 侧应用覆写。服务端输出中的规则顺序正确,不代表客户端侧覆写后仍保持相同顺序。排障时同时检查下载前配置和 OpenClash 最终运行配置。

验证

  1. 使用 explain=true 检查规则集数量和加载状态。
  2. 获取真实配置。
  3. 使用目标客户端或配置解析器验证语法。
  4. 检查终止规则位置。
  5. 检查客户端侧是否再次覆写。

Clone this wiki locally