本文目录
页面能打开,图片或登录却失败时,要找到失败请求的真实域名,别只给地址栏网址加规则。要让修改生效,还得看规则的位置、使用的策略是否存在,以及订阅更新会不会覆盖它。少量自定义规则可以直接写,需要持续更新的大名单再用规则集管理。
网站只有部分内容失败,规则应匹配哪个域名?
一个页面可能分别请求主域名、登录域名、图片 CDN 和 API。规则匹配的是实际连接中的域名、IP 或进程,地址栏里的网址不一定包含失败的资源。
保持 Rule 模式,在 Connections 找到刚才失败的请求;需要代理时,固定一个确认可用的节点。对照当前策略与期望策略,仅修改这条请求需要的规则,再重新发起请求。期望直连时不需要选择代理节点。
修改规则需要的连接信息
- 失败连接的完整域名或目标 IP
- 当前显示的规则类型与规则内容
- 最终使用的策略组或 DIRECT
- 这条连接实际应该去的策略
规则顺序:具体条件放在宽规则之前
Mihomo 从上到下检查规则,命中第一条就停止。具体条件通常位于更宽规则之前。
下面用 api.example.com 说明规则顺序,这个占位域名不能用于验证真实业务。应用到现有 Profile 时,换成 Connections 记录的真实域名,并使用该配置已有的目标组;组名引用必须完全一致,需要代理时才在组内选中可用节点。期望直连时才使用 DIRECT。
proxy-groups:
- name: 代理选择
type: select
include-all: true
proxies:
- DIRECT
rules:
- DOMAIN,api.example.com,代理选择
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,代理选择应用到自己的配置后,保存并重载,关闭修改前的旧连接,再重新请求实际目标。在 Connections 核对真实域名、新命中的规则和最终出口;仍是旧结果时,检查连接复用,以及当前 Profile 是否加载了本次修改。
在 Clash Verge Rev 添加规则,再检查更新后是否保留
直接修改远程订阅文件,下次更新可能覆盖修改。要让自定义规则保留,可以使用客户端的规则覆写功能,在加载订阅时加入自己的规则。
以下步骤以 Clash Verge Rev 为例:右键当前订阅卡片,进入“编辑规则”。添加的规则放在“前置规则”,位于订阅原有的宽规则与 MATCH 之前;其他客户端按自己的文档操作。
让一条自定义规则现在生效,且订阅更新后仍保留
记录真实请求与目标
在 Connections 取得失败请求的域名和当前命中规则,确定希望直连还是使用已有策略组。
确认目标策略可用
使用当前 Profile 已存在的组名;需要代理时在组内选中可用节点,不能只看到组名便认定走了代理。
添加一条前置规则
Clash Verge Rev 中右键当前订阅,打开“编辑规则”并添加一项。按完整域名匹配时,类型选 DOMAIN,填入 Connections 记录的域名,策略选已有组或 DIRECT,位置选“前置规则”。其他客户端按自身文档操作,不覆盖远程订阅缓存。
重载并发起新请求
关闭修改前的旧连接,再重复同一动作,读取新命中的规则和最终出口,检查实际失败资源是否恢复。
更新订阅后再查一次
手动更新当前订阅,重新请求并核对同一规则、实际出口和页面结果;失败时停用本次新增覆写,保留可用原配置。
两次请求都命中同一自定义规则,才证明“当前有效”和“更新后保留”同时成立。只在编辑器里搜索到文字,不能代表它已经进入 Mihomo 的运行配置。
旧教程的 prepend-rules 与当前规则编辑入口
早期教程可能用 prepend-rules 表示在订阅规则之前加入自己的规则。下面只用于辨认这种写法;当前入口与字段限制见提示。
prepend-rules:
- DOMAIN,api.example.com,DIRECT
- DOMAIN-SUFFIX,intranet.example,DIRECT需要持续更新的名单时,再用 rule-providers
只有几条自定义规则时,先通过当前客户端支持的覆写保存,并检查订阅更新后仍有效。需要项目持续维护的大名单时,再用 rule-providers 保存规则数据、用 RULE-SET 引用它;匹配后使用哪个策略,仍由 rules 中的目标决定。
provider 只是规则数据,不会自己选择节点。示例中的“RULE-SET,work-domains,代理选择”把匹配结果交给已经定义的“代理选择”;如果换成自己的组名,proxy-groups 和 rules 两处必须完全一致。
proxy-groups:
- name: 代理选择
type: select
include-all: true
proxies:
- DIRECT
rule-providers:
work-domains:
type: http
behavior: domain
format: yaml
url: https://rules.example.com/work.yaml
path: ./ruleset/work.yaml
interval: 86400
rules:
- RULE-SET,work-domains,代理选择
- MATCH,代理选择behavior 与 format:名单内容、格式及组合限制
rule-provider 的 behavior
| 值 | 文件里放什么 | 不适合放什么 |
|---|---|---|
| domain | 域名、域名后缀等域名集合 | IP 网段与完整经典规则行 |
| ipcidr | IPv4 / IPv6 CIDR | DOMAIN、PROCESS-NAME 等条件 |
| classical | 带类型和匹配条件,例如 DOMAIN-SUFFIX,...,不带策略目标 | 只想维护纯域名时会显得冗长 |
behavior 决定名单内容,format 决定文件格式。yaml、text 和 mrs 不能任意组合:mrs 只支持 domain、ipcidr,不支持 classical。先核对规则源公布的 behavior、format 和实际内容;文件下载成功,不代表组合正确或已经加载。
不要根据 URL 后缀猜格式。规则源改变格式后,客户端仍可能保留旧缓存;按日志中的 provider 名称和解析错误,确认正在加载哪份内容。
规则集下载失败:地址、间隔、代理与缓存
- type
- http 从远程更新,file 读取本地文件,inline 把内容直接放在配置中。
- url
- 远程规则源地址;401、403、404 和 timeout 应按 HTTP 结果处理。
- interval
- 更新间隔,单位为秒。过短只会增加请求,并不会让规则更准确。
- proxy
- 指定下载规则源时使用的代理;源站本地可达时也可以按配置直连。
- path
- 缓存文件路径。Mihomo 默认限制在 HomeDir,外部路径需要 SAFE_PATHS。
provider 下载失败时,旧缓存可能仍被使用,所以“网站还能打开”不代表今天更新成功。查看 provider 的本次更新时间与日志,保留旧缓存到新源恢复,不要直接删掉所有规则文件。
规则不生效:下载、格式、引用名与顺序
provider download 401 / 403 / 404
处理远程地址、权限或已迁移路径,规则语法还未参与。
provider parse error
核对 behavior、format 与源文件实际内容。
RULE-SET not found
rules 引用名与 rule-providers 键名不一致。
proxy group not found
规则目标组在当前订阅中不存在或已经改名。
规则加载但总命中前一条
调整顺序,让具体规则位于宽规则和 MATCH 之前。
订阅更新后自定义项消失
停止直接改远程文件,改用绑定当前 Profile 的覆写。
添加规则后,检查同页其他连接
规则越多,互相遮挡的机会越大。完成目标域名的验证后,检查同一页面的其他连接是否仍按预期直连或代理;若只需要三条规则,就不必引入一个包含数万条未知来源的列表。
保留新增规则的域名、匹配条件和目标组记录,便于节点或 Profile 改名后检查引用。
