Shadowrocket 只让部分网站走代理:DOMAIN-SUFFIX 规则写法与 FINAL 兜底

以只代理指定站点为场景,讲解 DOMAIN-SUFFIX、DOMAIN-KEYWORD 的写法与匹配顺序,以及把 FINAL 设为 DIRECT 的配置思路,附 example.com 示例片段。

本文速览

Shadowrocket(小火箭)只让部分网站走代理,需要同时满足三个条件:Home → Global Routing 选择 Config,当前配置中先写目标域名的代理规则,最后用 FINAL,DIRECT 处理其余请求。本文面向已经拥有可用服务器配置的用户,给出最小规则片段、匹配边界与验证步骤;示例域名仅用于说明语法,不代表可用线路。

一、先确定 Config 模式与策略名称

“只代理指定网站”是规则分流任务,不是把连接开关打开就会自动实现。Home 中的 Global Routing 决定本次连接采用哪一种路由方式;Config 页面则用于管理配置文件。两处名称相近,但作用不同:前者决定是否按规则处理,后者决定使用哪一份规则。

选项用途本文应如何处理
Config依据当前配置中的规则决定策略选择这一项后验证指定域名
Proxy以代理方式处理流量不用于验证“其他网站直连”的规则目标
Direct以直连方式处理流量不能据此验证域名代理规则是否生效
Scene使用场景设置决定路由行为本次测试先切到 Config,减少场景条件的干扰

规则第三项是策略,而不是协议名称。DIRECT 表示直连;本文用 PROXY 表示已存在且可用的代理策略。编辑前必须确认当前配置能正确解析这个名称,并且它指向预期服务器。若你使用的是自定义策略组,应将示例中的 PROXY 换成该组的准确名称,不能仅复制一个不存在的名称。

二、DOMAIN-SUFFIX 的最小配置与匹配边界

如果目标是让 example.com 及其子域名走代理,而其他请求直连,可在配置的 [Rule] 段中使用下面两条规则。这是规则片段,不是包含服务器、策略组与其他设置的完整配置;不要用它覆盖整份现有文件,也不要在文件中重复创建多个规则段。

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

DOMAIN-SUFFIX 按域名后缀边界匹配。填写域名本身即可,不写 https://,不写路径,不写 :443,也不需要写成 *.example.com。它覆盖根域名及下级域名,但不会因为另一域名中恰好包含相同字母就匹配。

请求目标是否命中上述最小规则的结果
example.com是PROXY
www.example.com是PROXY
api.example.com是PROXY
notexample.com否DIRECT
example.net否DIRECT

如果只希望 www.example.com 走代理,而同站的 api.example.com 必须直连,应使用精确域名规则 DOMAIN,www.example.com,PROXY,而不是扩大到整个根域名。规则应围绕实际请求的主机名编写,不应把网站名称或页面标题当成域名。

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

DOMAIN-KEYWORD 检查域名中是否包含指定字符串,范围比后缀规则更宽。例如 DOMAIN-KEYWORD,example,PROXY 不仅可能覆盖 example.com,还会覆盖 notexample.com。当目标是准确列出少数网站时,优先选择 DOMAIN 或 DOMAIN-SUFFIX,不要为了少写几行而扩大匹配范围。

3 项
域名规则基本字段:类型、匹配值、策略
2 行
最小示例:一条后缀规则与一条兜底规则
最后 1 条
FINAL 放在规则末尾,处理此前未命中的请求

规则通常按从上到下的顺序判断,先命中的规则决定策略。更具体的例外必须位于宽泛规则之前。下面的例子让 static.example.com 直连,其他属于 example.com 的域名走代理,剩余请求仍然直连。

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

结论:先写例外,再写范围,最后兜底

保存前从第一行向下检查:精确例外能否先命中、后缀范围是否过大、FINAL 是否确实位于末尾。用这个顺序审查,比不断追加重复域名规则更容易发现冲突。

如果沿用的配置中还有 GEOIP、IP-CIDR 或外部规则集,FINAL,DIRECT 并不会覆盖它们已经作出的决定。要实现严格的“仅指定网站代理”,还需审查前面是否存在其他指向代理的规则。不要只改最后一行,就把整份原有配置当作白名单模式。

四、在 Home 与 Config 中应用并验证

以下过程每次只改变规则和路由模式,不同时调整 DNS、服务器协议或 On Demand。这样访问结果发生变化时,能够判断是否来自本次规则修改。若已有 Settings → On Demand 设置会自动触发连接,应先记录其状态,避免把自动重连误认为配置未保存。

  1. 确认服务器

    在 Home 确认选中的服务器或策略组可用。用户已有自己的服务商与订阅时,先保证原配置能完成正常访问,再进行规则实验。

  2. 保存原配置

    进入 Config,确认当前使用的文件,保留原内容。修改其中的 [Rule] 段,检查代理策略名、英文逗号以及 FINAL 的位置。

  3. 选择规则模式

    保存并选用编辑后的配置,回到 Home → Global Routing → Config。必要时断开后重新连接,使后续验证使用新建立的连接。

  4. 对照两个目标

    访问一个你实际填写的目标域名,再访问一个未列入规则的域名。结合请求记录中的主机名、命中规则与策略检查结果,不仅看页面能否打开。

  5. 检查附属请求

    若正文出现但图片或登录失败,检查失败请求的真实域名。只有确认属于需要代理的资源后,才补充对应规则,再重新测试。

浏览器可能复用旧连接,单纯刷新页面未必建立新的连接。修改规则后应结束旧请求并重新发起测试;不要用仍在播放的长连接判断新规则。example.com 是说明语法的保留域名,实际验证时应换成自己需要访问且有权使用的目标域名。

五、FINAL 已是 DIRECT,为什么结果仍不符合预期

先区分“策略不符合预期”和“策略正确但请求失败”。命中 PROXY 却无法连接,可能是服务器或目标连接问题;命中 DIRECT 却无法打开,也可能是本地网络无法直达目标。添加更多域名规则并不能修复所有连接错误。

报错:The request timed out.

原因与解法:请求等待超时,仅凭该文字不能判断规则是否写错。先检查失败请求的策略;若确实命中预期的 PROXY,再用已有可用服务器对照测试,避免直接修改 FINAL。

报错:A server with the specified hostname could not be found.

原因与解法:主机名解析失败。先核对地址拼写与请求主机名,再检查当前配置中的 DNS 设置;不要把解析失败当作 DOMAIN-SUFFIX 没有覆盖子域名。

以上是系统网络请求可能返回的英文错误文本,具体呈现会随调用方和系统语言变化。诊断时要保留原始文字,并同时记录失败域名与实际策略,而不是只记录“打不开”。

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

我只写 example.com,www 也会走代理吗?

使用 DOMAIN-SUFFIX,example.com,PROXY 时会覆盖 www.example.com。若用的是 DOMAIN,example.com,PROXY,则只匹配根域名,应按需求补充精确域名,或改用后缀规则。

只想代理某个网址的一个路径,可以这样写吗?

不能把 example.com/account 写进 DOMAIN-SUFFIX。域名分流不按 URL 路径区分,同一主机名下不同路径不会因这条规则得到不同策略。先确认需求是否能按独立子域名划分。

更新订阅之后,还要重新写规则吗?

先分清更新的是 Home 中的服务器订阅,还是 Config 中的远程配置。前者主要更新服务器资料;后者可能替换本地编辑内容。更新后打开当前配置核对规则,并保留自己的修改副本。

FINAL,DIRECT 是不是表示关闭连接?

不是。它指定未匹配请求的处理策略,不负责关闭 Home 的连接开关。保持连接并使用 Config,才能让指定域名继续按代理规则处理。

最终验收应同时满足三项:目标域名命中预期代理策略、未列入规则的测试域名命中 DIRECT、保存并重新连接后结果保持一致。后续增加网站时,一次添加一组域名并重复验证,保留清楚的修改记录,避免把白名单逐渐变成无法解释的宽泛匹配。

App Store 正版下载与核验