2026-08-03 · 规则分流 · 约 8 分钟

Shadowrocket 分流规则写法:只让指定网站走代理的 DOMAIN-SUFFIX 配置

组合使用 DOMAIN-SUFFIX、DOMAIN-KEYWORD 与 FINAL,DIRECT,让少数网站走 PROXY、其余直连,并说明规则顺序与验证方法。

本文速览

适合已经有可用连接配置、只希望少数网站走代理的用户。先把 Home → Global Routing 设为 Config,再在当前配置的 [Rule] 中列出目标域名,最后用 FINAL,DIRECT 处理其余请求。本文给出最小规则、匹配顺序、逐项验证与故障定位方法;示例域名只用于说明语法,需要替换为实际访问的域名。

一、先确认 Global Routing 与当前配置

Shadowrocket(小火箭)的连接开关与分流规则承担不同职责:开关负责启用连接,Global Routing 决定如何选择出站方式。要实现“指定网站走代理,其余直连”,应使用 Config;仅把规则写入文件,却仍停留在 Proxy 或 Direct,不能验证这套规则的效果。

本文以用户已有自己的服务商与订阅、且已有可用连接参数为前提。客户端购买与连接服务相互独立。Shadowrocket 是闭源商业应用,在 Apple 平台通过 App Store 一次性买断获取,以 iPhone 和 iPad 为主;系统要求与购买适用范围以 App Store 页面标注为准。

设置项用途本文如何选择
Proxy全局代理姿态,不按本文的域名规则划分请求仅用于单独验证代理路径
Direct全局直连姿态不能用于验证指定域名走代理
Config按当前配置中的规则决定策略本文使用此项
Scene按已设置的场景条件应用对应的路由设置先固定为 Config,减少环境切换变量
  1. 在 Home 确认已选中本人有权使用、且能够连接的服务器配置。
  2. 进入 Config,确认当前启用的是准备修改的配置文件。先保留一份副本,避免修改后无法还原。
  3. 回到 Home → Global Routing,选择 Config;核对后再打开连接开关。

Home 中的服务器信息和 Config 中的规则文件不是同一层设置。更新订阅通常用于更新连接条目,并不等于已启用刚编辑的规则文件;每次测试前都应确认当前配置。

二、DOMAIN-SUFFIX 的最小规则写法

如果目标是一个网站及其子域名,优先使用 DOMAIN-SUFFIX。下例把 example.com 和 example.net 对应的域名后缀交给 PROXY,其余请求交给 DIRECT。这里的域名是语法示例,不代表服务推荐。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
FINAL,DIRECT

如果现有配置已经包含 [Rule],应在该段内修改,不要再次添加同名段,也不要用这四行覆盖整个配置文件。原有 DNS、策略组和其他设置应单独保留并检查。若保留旧规则,必须同时审查它们是否会扩大代理范围。

规则中的域名不带 https://、路径、查询参数或端口。访问地址即使写成 https://www.example.com:443/account,这里填写的仍然是 example.com;DOMAIN-SUFFIX 不是按网页路径匹配的规则。

三、DOMAIN-KEYWORD 与规则顺序怎么组合

DOMAIN-KEYWORD 按域名中的关键词匹配,范围通常比 DOMAIN-SUFFIX 更宽。例如 DOMAIN-KEYWORD,example,PROXY 不仅可能匹配 example.com,也可能匹配 myexample.net。如果只是指定几个已知网站,列出域名后缀通常更容易检查。

规则从上到下检查,先命中的规则决定对应策略。例外应放在宽泛规则前面,FINAL 放在最后。以下示例要求登录子域名直连、主站其余子域名走代理,同时演示关键词规则的位置:

[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,examplemedia,PROXY
FINAL,DIRECT
请求域名首先命中的规则策略
login.example.comDOMAIN 精确匹配DIRECT
img.example.comDOMAIN-SUFFIXPROXY
cdn.examplemedia.netDOMAIN-KEYWORDPROXY
example.orgFINALDIRECT

结论:少量网站优先枚举域名

先仅使用 DOMAIN 与 DOMAIN-SUFFIX,确认全部目标可用后,再考虑是否需要 DOMAIN-KEYWORD;每增加一条关键词规则,都用一个预期不匹配的域名做反向检查。

对于“其余全部直连”的目标,现有配置中的 GEOIP 或 IP-CIDR 规则也必须检查。例如旧文件若有 GEOIP,US,PROXY,即使末尾是 FINAL,DIRECT,符合该 IP 地理分类的其他请求仍可能走代理。IP-CIDR 则按地址网段匹配,不能用它替代会变动地址的网站域名清单。

四、保存后如何验证确实按规则分流

网页能打开,不足以证明命中了预期规则;网页打不开,也不足以证明规则写错。应把“规则选择了什么策略”和“该出站能否完成连接”分开验证。以下流程描述检查顺序,不是应用界面示意。

发起请求 识别域名 顺序匹配 选择策略 验证连接
  1. 确认文件生效:保存后回到 Config,核对当前启用文件;在 Home → Global Routing 确认仍为 Config。
  2. 建立新连接:关闭测试网页后重新打开。必要时断开再重新连接 Shadowrocket,减少旧连接复用对观察的影响。
  3. 测试正例:访问已填写的目标网站,在应用内连接记录或日志中核对目标 Host、命中规则和策略信息;以当前界面实际提供的字段为准。
  4. 测试反例:访问一个未列入规则的网站,确认其请求落到 DIRECT,而不是只观察一个目标网站。
  5. 检查依赖请求:若页面文字正常但图片、视频或登录失败,检查这些资源实际请求的域名,再决定是否添加单独规则。

一个页面可能同时请求主站、登录接口、图片域名和独立的 CDN 域名。DOMAIN-SUFFIX 只覆盖同一域名后缀,不会因为某个资源出现在网页里就自动让它跟随主站走代理。应根据连接记录补充必要域名,而不是不断扩大关键词。

还要区分 DNS 与连接策略:FINAL,DIRECT 决定未匹配连接的出站,不等于把所有 DNS 查询也强制直连。DNS 解析路径由相应设置决定;当记录中只出现 IP 而没有可用域名信息时,域名规则可能无法按预期匹配,应先检查应用实际记录与解析设置。

五、超时、拒绝连接与规则未命中的排查

先看请求记录里的策略,再看错误。下面列出连接日志中可能出现的底层错误文本,具体呈现可能带有地址或其他上下文。它们不是规则语法错误的同义词,也不应直接作为增加域名规则的依据。

报错:Connection timed out

原因与解法:连接在规定时间内未完成,可能涉及所选代理、目标地址或当前网络路径——先核对该请求是 PROXY 还是 DIRECT;如果是 PROXY,用同一已知可用目标检查所选连接,避免先扩大规则范围。

报错:Connection refused

原因与解法:目标地址对应端口拒绝了连接,常见于端口不符或服务未监听——核对已有配置的地址、端口与服务状态;例如服务参数明确要求 443 时,不能自行改成 80,也不能仅凭此错误断定所有服务都应使用 443。

结论:每轮只改一个变量

固定同一个测试网站、同一个网络与同一个代理出站,先改规则并观察命中;命中正确后仍失败,再检查连接参数。不要同时更换出站、DNS 和规则,否则难以确定是哪一步改变了结果。

六、指定网站分流的常见问题

只想让一个页面走代理,其他页面直连,可以用域名规则吗?

DOMAIN 与 DOMAIN-SUFFIX 不区分同一域名下的网页路径。若两个页面都使用同一个 Host,本文规则会让它们使用相同策略。不要把带路径的完整网址填入 DOMAIN-SUFFIX。

添加 example.com 以后,还要写 www.example.com 吗?

使用 DOMAIN-SUFFIX 时通常不需要,前者已经覆盖后者。若主站实际跳转到另一个独立域名,就需要按连接记录添加那个域名;先确认真实请求,再修改 Config。

切成 Proxy 就能打开,切回 Config 却打不开,先查哪里?

先在 Config 姿态下重新发起请求,检查失败请求是否命中 PROXY。若落到 DIRECT,查漏掉的域名与前置规则;若已经命中 PROXY,则继续核对实际出站和失败的具体连接,不要仅添加重复规则。

FINAL,DIRECT 是不是意味着断开 Shadowrocket?

不是。它只规定未命中前面规则的请求使用 DIRECT,不会关闭连接开关。保留 Config 与连接启用状态,才能继续让前面命中的指定域名使用 PROXY。

维护时保留一份已验证的配置副本,并记录每次新增域名的用途。需要更细的选项说明,可查阅选项手册;不确定规则关键字含义时,先查看概念速查,再回到最小规则逐项测试。

App Store 正版核对