Shadowrocket 的规则分流由当前启用的配置决定:连接请求按规则顺序逐条匹配,命中后使用对应策略,例如 DIRECT 直连或 PROXY 代理。设置前要先确认 Home → Global Routing 选择了 Config,并确认编辑的是当前使用的配置;只添加规则但未启用对应配置,分流结果不会按预期变化。
本文适合已经导入自己的服务器或订阅、准备按域名设置直连与代理的 Shadowrocket 用户。你将了解 Config 路由的前提、域名规则的写法、规则顺序和策略名称的检查方法,并通过单一域名测试验证结果。示例域名仅用于说明语法,不是可连接的服务地址;订阅链接从你的服务商处获取。
一、先确认 Config 路由与当前配置
规则要生效,首先要让流量经过配置规则。在 Home 查看 Global Routing,选择 Config;如果选中的是 Proxy,流量会按代理姿态处理,不能据此判断某条 DIRECT 规则是否命中;如果选中 Direct,也不能用来验证某条 PROXY 规则。Scene 则还受场景设置影响,排查时应先确认当前场景条件。
接着打开 Config,确认正在使用的配置文件。设备上可能保存多个配置,改动一个文件并不代表另一个正在启用的文件也发生变化。建议记下配置名称,检查完成后返回 Home,再核对 Global Routing 仍为 Config。Home 中选中的服务器与规则策略也不是同一项:规则可以指向代理策略或策略组,实际出站还取决于该策略当前的选择。
| Global Routing | 流量处理方式 | 能否验证域名规则 |
|---|---|---|
Config | 按当前配置的规则与策略处理 | 可以,本文操作以此为前提 |
Proxy | 采用代理路由姿态 | 不适合判断某条规则是否选了 DIRECT |
Direct | 采用直连路由姿态 | 不适合判断某条规则是否选了 PROXY |
Scene | 根据已设置的场景条件应用路由行为 | 先检查场景设置,避免混淆验证结果 |
测试前核对
- 路由姿态
- Home → Global Routing → Config
- 配置文件
- Config 中确认当前使用项
- 代理策略
- 确认 PROXY 或目标策略组可用
先确认配置处于使用状态,再判断规则是否正确。
策略含义
- DIRECT
- 直接连接目标,不经代理服务器
- PROXY
- 交给代理出站处理
- FINAL
- 作为未命中前序规则时的兜底
规则中的策略名称必须与配置可用的策略一致。
二、用域名规则指定直连或代理
域名规则的匹配对象是主机名,不是完整网页地址。添加规则时不要附加 https://、端口、路径或查询参数。比如要匹配 api.example.com,就填写主机名;写成带有 /v1/list 的网址并不能让规则只匹配该页面路径。
DOMAIN 用于匹配一个完整域名;DOMAIN-SUFFIX 用于匹配指定域名本身及其下级子域名。后缀匹配有域名边界,因此 DOMAIN-SUFFIX,example.com,DIRECT 会匹配 example.com 和 www.example.com,但不会匹配 notexample.com。如需只匹配一个具体主机名,使用 DOMAIN 更明确。
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
DOMAIN-SUFFIX,media.example.net,PROXY
FINAL,DIRECT
这段示例表示:api.example.com 先命中第一行,交给 PROXY;www.example.com 不匹配第一行,继续匹配后缀规则并走 DIRECT;media.example.net 走代理;其他未命中的请求使用最后一行的 DIRECT。这些示例域名只用于解释行为,不代表实际服务或线路。
注意,规则末尾的策略名不是随手填写的备注。若配置中没有对应策略,或策略组尚未选定可用出站,规则即使匹配正确,也可能无法按预期连接。若使用自定义策略组名称,先确认它已存在于当前配置中,再将规则指向该名称。
三、在当前配置中添加规则并保存
以下流程以在现有配置中编辑规则为例。应用界面文字或编辑入口可能随当前版本与配置类型略有差异;操作目标是找到正在使用的 Config、进入规则列表、将新规则放到合适位置并保存。编辑前可复制配置作为备份,避免误删已有规则。
-
确认配置
打开 Config,识别当前使用的配置文件。若列表中有多个相似名称,先核对正在启用的项目,不要直接编辑一个仅名称相近的副本。
-
进入规则
打开该配置的编辑界面,找到规则列表或对应规则区域。若配置由订阅提供且无法直接编辑,先确认应用界面是否允许对该配置进行本地修改;不要把订阅链接粘贴进规则文本框。
-
填写规则
按“类型、匹配内容、策略”的顺序添加一行,例如
DOMAIN-SUFFIX,example.com,DIRECT。规则类型、域名和策略之间使用英文逗号,避免混入中文逗号或域名前后的空格。 -
调整顺序
将范围更具体的例外放在可能覆盖它的宽泛规则之前,并把
FINAL放在兜底位置。检查前后规则是否已经匹配同一个域名,避免新规则被前面的宽泛条件提前截获。 -
保存并复核
保存配置后返回 Home,确认 Global Routing 为
Config。再回到 Config 检查刚才的规则仍存在,并确认策略名称与当前配置中的策略一致。
四、检查优先顺序,避免宽泛规则遮住例外
规则按列表从上向下检查,通常在首次匹配后就采用对应策略,不会继续寻找后面的“更精确”规则。因此,若要让某个子域名走代理、其余主域名及子域名直连,应把子域名的精确规则放在后缀规则之前。
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,PROXY
如果把 DOMAIN-SUFFIX,example.com,DIRECT 移到第一行,api.example.com 会先被它匹配,后面的精确代理规则就没有机会生效。相同原则也适用于其他规则类型:先放具体例外,再放覆盖范围更大的规则,最后用 FINAL 处理剩余请求。
结论:用“例外在前、范围在后”检查顺序
添加规则后,不只检查新行本身,还要从列表顶部开始追踪测试域名会遇到的第一条匹配项。若宽泛规则先命中,调整顺序通常比继续添加重复规则更直接。
| 顺序情况 | 测试域名 | 实际命中与结果 |
|---|---|---|
| 精确 DOMAIN 在前 | api.example.com | 先命中 DOMAIN,走 PROXY |
| 后缀规则在前 | api.example.com | 先命中 DOMAIN-SUFFIX,后面的精确规则不再决定结果 |
| 未命中前序规则 | other.test | 继续检查,最终由 FINAL 兜底 |
域名规则也有边界:同一个网站可能从多个主机名加载页面、接口、图片或媒体内容。只为主页面域名设置代理,不一定覆盖所有相关请求。发现页面部分内容加载失败时,先记录失败请求使用的主机名,再按实际需要添加规则;不要为了一个问题直接把范围扩展到整个宽泛域名集合。
五、按测试域名验证结果并排查常见问题
验证时一次只测试一个目标域名,并保留当前配置和服务器选择不变。先确保连接已建立,再通过浏览器访问目标;如果应用提供对应的请求或连接记录,可检查该请求对应的域名与策略。Connectivity Test 可用于检查连通情况,但它本身不能证明某个特定域名命中了预期规则。测试前后若同时更换路由姿态、服务器和规则,就难以判断是哪项变化影响了结果。
- 直连测试:将目标域名设为
DIRECT,在Config姿态下重新发起访问,并核对实际请求是否匹配该规则。 - 代理测试:将目标域名设为
PROXY,确认代理策略或策略组已有可用选择,再重新发起访问。 - 结果对照:记录测试域名、命中的规则、对应策略和访问结果。不要把一次连通结果推广为所有域名都可用。
- 恢复检查:完成临时测试后,确认没有遗留的全局
Proxy或Direct姿态,日常分流仍使用预期配置。
加了规则,访问还是走错策略?
先确认 Home → Global Routing 为 Config,再从规则列表顶部检查该域名最先命中的规则;同时确认编辑的是当前启用的配置。
域名规则里要写完整网址吗?
不需要。填写主机名,不加协议头、路径、端口或查询参数;只匹配一个主机名时可用 DOMAIN,覆盖主域名及其子域名时可用 DOMAIN-SUFFIX。
为什么首页打开了,图片却加载失败?
页面资源可能来自其他主机名。检查失败请求实际使用的域名,再决定是否为该域名增加规则;不要仅凭主页面地址推断所有资源都匹配同一条规则。
配置有规则,但切到 Direct 后结果变了?
Direct 是全局路由姿态,不适合验证配置中的 PROXY 规则。切回 Home → Global Routing → Config,再使用同一个目标域名重新测试。
如果规则已按预期命中但目标仍不可访问,继续区分策略与连接问题:检查 PROXY 对应的服务器或策略组是否可用,并确认基础网络正常;如果规则根本没有命中,则优先核对域名拼写、规则顺序、配置是否启用以及请求是否以域名信息参与匹配。需要进一步了解配置管理时,可查看使用教程。