Starway星途VPN - 访问海外网络加速 | 全球网络加速服务

Mihomo 规则配置怎么写?语法、顺序与可复制示例

更新于 2026-11-02 · xingtu.buzz

简答:Mihomo 的 rules 每行通常按“规则类型,匹配内容,策略名”书写,例如 <code>DOMAIN-SUFFIX,example.com,PROXY</code>。规则会从上到下匹配,第一条命中的规则生效,因此应先写更具体的例外,再写通用规则,最后用 <code>MATCH</code> 兜底。

定义:Mihomo 规则配置,是通过 rules 和可选的 rule-providers,把域名、IP、进程或网络类型匹配到 DIRECT、REJECT 或指定策略组的路由配置。

先试这一步:用最小模板确认规则能工作

如果你刚开始写 Mihomo 规则,不要先复制一整套复杂配置。先备份现有配置,在确认客户端支持的配置入口后,只替换或追加 proxy-groups 与 rules 相关部分。下面的示例假定你已经有一个名为 PROXY 的策略组;如果实际名称不同,必须逐字替换。

规则写法匹配对象常见用途
DOMAIN,example.com,PROXY完整域名只匹配一个明确域名
DOMAIN-SUFFIX,example.com,PROXY域名及其子域名匹配主域名下的多个站点
DOMAIN-KEYWORD,example,PROXY包含关键词的域名临时测试,需注意误匹配
IP-CIDR,192.0.2.0/24,DIRECT,no-resolveIPv4 网段局域网或已知地址段
GEOIP,CN,DIRECT目标 IP 的地区库结果按 IP 地区分流
MATCH,PROXY其余全部请求最后的兜底规则

规则格式和可用类型应以 Mihomo 官方路由规则文档为准。策略名不是固定关键字:PROXY、DIRECT 或自定义名称,必须能在当前配置的策略组、代理或出站中找到。

一个可以先验证结构的最小示例是:rules: - DOMAIN,example.com,PROXY - DOMAIN-SUFFIX,lan,DIRECT - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve - MATCH,DIRECT。这里的域名和网段仅用于演示格式,不代表任何实际服务清单。

Mihomo rules 的基本语法与匹配顺序

大多数基础规则可以理解为三个字段:规则类型、匹配参数、策略名,字段之间用英文逗号分隔。例如 DOMAIN-SUFFIX,example.com,PROXY 中,DOMAIN-SUFFIX 是类型,example.com 是参数,PROXY 是命中后的策略。

Mihomo 按从上到下的顺序检查规则,靠前规则优先级更高;匹配成功后通常不会继续检查后面的规则。官方文档还说明,如果目标 IP 规则需要先解析域名,可以使用默认行为;添加 no-resolve 可以跳过这一步。详情见 官方规则优先级与 no-resolve 说明。

因此,推荐采用“例外在前、范围由窄到宽、MATCH 最后”的顺序:

  1. 先写必须直连或拒绝的明确域名。
  2. 再写某个域名后缀、应用类别或规则集。
  3. 之后写 GEOIP、IP-CIDR 等更宽泛的匹配。
  4. 最后保留一条 MATCH 作为兜底。

反例是先写 GEOIP,CN,DIRECT,后面才写某个需要代理的国内 IP。前面的 GEOIP 已经命中,后面的例外可能不会生效。调整方法是把例外规则移动到 GEOIP 之前,并通过日志或规则命中信息复测。

DOMAIN、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD 怎么选

DOMAIN 用于精确匹配一个完整域名。例如 DOMAIN,api.example.com,PROXY 只针对这个域名。

DOMAIN-SUFFIX 用于匹配主域名及其子域名。官方示例表明,google.com可以匹配 google.com、www.google.com 和 mail.google.com,但不会匹配 content-google.com。因此,需要覆盖一个站点及其子域名时,通常优先考虑该类型。

DOMAIN-KEYWORD 是关键词匹配,只要域名中包含指定文字就可能命中。例如 DOMAIN-KEYWORD,example,PROXY 的范围可能比预期更宽,不建议把它当作长期精确分流规则。排查误匹配时,可先改成 DOMAIN 或 DOMAIN-SUFFIX,再观察实际请求。

如果需求是按 IP 网段匹配,可使用 IP-CIDR 或 IP-CIDR6;如果是按地区匹配,可使用 GEOIP。这些规则依赖当前配置中的解析和地理数据,不能仅凭域名规则推断结果。

用 RULE-SET 和 rule-providers 管理较大的规则集

规则数量较多时,可以把规则放到 rule-provider,再在 rules 中用 RULE-SET 引用。官方配置要求为 provider 指定名称,并根据来源类型配置 type、url 或 path;behavior 可选 domain、ipcidr、classical,format 可选 yaml、text、mrs。具体字段以 Mihomo 官方 Rule Providers 文档为准。

一个不含真实订阅地址的结构示例:

rule-providers: local-domain: type: file behavior: classical path: ./rules/local-domain.yaml interval: 86400 rules: - RULE-SET,local-domain,PROXY - MATCH,DIRECT

这里的 local-domain 只是本地规则集名称,必须与 RULE-SET 中的名称完全一致。若使用 type: http,还需要核对远程文件实际格式与 behavior 是否对应;不能因为文件名是 yaml 或 mrs,就直接假定其内容一定兼容。

官方规则文档也支持 AND、OR、NOT 等逻辑规则,但括号层级更容易写错。新手建议先用多条普通规则完成验证,只有在确实需要组合域名、网络类型或进程条件时再增加逻辑规则。

配置不生效时:按“校验—命中—策略”排查

  1. 先备份并校验 YAML。检查是否混用了 Tab 和空格、缩进层级是否一致、冒号后是否缺少空格,以及策略名称中是否包含未正确处理的特殊字符。修改后先让客户端重新加载配置,无法加载时立即回滚到备份。
  2. 确认当前运行的是 Rule 模式。官方常规配置将 mode: rule定义为按规则匹配;如果当前处于全局或直连模式,rules 可能不会按预期承担分流作用。可参考 Mihomo 官方常规配置说明核对当前模式。
  3. 检查策略名。RULE-SET,local-domain,PROXY 中的 PROXY 必须是实际存在的策略组或出站名称。名称大小写、空格和符号都应按当前配置逐字核对。
  4. 查看规则命中情况。如果客户端提供控制面板或 API,可读取当前规则列表及命中信息。官方 API 文档说明,规则接口会返回规则索引、类型、匹配内容、目标策略,以及可选的命中次数和最近命中时间,详见 Mihomo 官方 API 文档。
  5. 逐条缩小范围复测。先只保留一条明确的 DOMAIN 规则和一条 MATCH,确认命中后再恢复后缀、IP、GEOIP 或 RULE-SET。这样可以判断问题来自语法、顺序、DNS 解析,还是规则集内容。

如果订阅更新后自定义规则消失,应先确认客户端使用的是完整配置、覆写配置还是独立配置文件。不要直接修改无法持久化的临时生成文件;应在当前客户端实际保存自定义规则的位置进行修改,并在更新订阅后重新检查。

一份可执行的配置流程

  1. 确定入口:打开 Mihomo 所在客户端的配置编辑、覆写或本地配置文件入口,先复制一份备份。
  2. 确认策略:找到 proxy-groups、代理或出站定义,记录准备引用的准确名称,例如 PROXY、DIRECT。
  3. 写最小规则:先加入一条明确的 DOMAIN 或 DOMAIN-SUFFIX,并把 MATCH 放在最后。
  4. 加载配置:保存后重新加载配置,观察是否出现 YAML、规则类型或策略名称错误。
  5. 验证结果:访问目标域名,查看连接日志或规则命中信息,确认实际策略是否与预期一致。
  6. 逐步扩展:确认基础规则正常后,再加入 IP-CIDR、GEOIP、GEOSITE 或 RULE-SET。
  7. 回滚:如果出现整体无法连接、部分应用异常或规则集加载失败,恢复备份,暂时删除最近新增的规则,再逐条加回。

不同图形客户端的菜单名称和覆写方式可能不同,版本差异也可能导致入口变化;无法确认的菜单路径应以当前客户端界面和 Mihomo 内核文档为准。

常见问题 FAQ

Q1:Mihomo 的 rules 必须放在配置文件最后吗?

不应只按文件位置判断。它需要位于正确的 YAML 顶层结构下,并且规则列表内部要按优先级排序。通常把例外写在前面,把 MATCH 放在规则列表最后。

Q2:为什么写了 DOMAIN-SUFFIX 还是没有命中?

先检查请求的真实域名、策略模式、规则顺序和 DNS 行为,再确认策略名是否存在。若前面的 GEOIP、RULE-SET 或其他宽泛规则已经命中,后面的 DOMAIN-SUFFIX 不会继续生效。

Q3:DOMAIN 和 DOMAIN-KEYWORD 哪个更好?

没有绝对更好。需要精确控制时优先使用 DOMAIN;需要覆盖主域名及子域名时使用 DOMAIN-SUFFIX;DOMAIN-KEYWORD 范围更宽,适合测试或明确知道关键词不会造成误匹配的场景。

Q4:RULE-SET 和 rule-providers 是一回事吗?

不是。rule-providers负责定义规则集来源、格式和更新方式,RULE-SET是在 rules 中引用这个规则集的规则类型,两者的名称必须对应。

Q5:为什么加入 MATCH 后,后面的规则都没有效果?

MATCH会匹配所有未被前面规则处理的请求,因此它应当作为最后的兜底规则。把它提前会截断后续规则的匹配机会。

常见问题

Mihomo 的 rules 必须放在配置文件最后吗?

不需要按文件最后判断,但必须位于正确的 YAML 顶层结构下。规则列表内部应按优先级排序,例外靠前,MATCH 通常放最后。

为什么 DOMAIN-SUFFIX 写了却没有生效?

检查真实请求域名、当前模式、规则顺序和策略名称。若前面的 GEOIP 或 RULE-SET 已经命中,后面的 DOMAIN-SUFFIX 不会继续匹配。

RULE-SET 和 rule-providers 有什么区别?

rule-providers 定义规则集的来源、格式和更新方式;RULE-SET 在 rules 中引用该规则集。引用名称必须与 provider 名称完全一致。

Mihomo 规则配置报 YAML 错误怎么办?

先恢复备份,再检查 Tab、空格、缩进、冒号和特殊字符。确认最小配置可以加载后,再逐段恢复新增规则。

相关阅读

参考资料

  1. Mihomo 官方文档:Route Rules
  2. Mihomo 官方文档:Rule Providers
  3. Mihomo 官方文档:General configuration
  4. Mihomo 官方文档:APIs