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,不要为了少写几行而扩大匹配范围。
规则通常按从上到下的顺序判断,先命中的规则决定策略。更具体的例外必须位于宽泛规则之前。下面的例子让 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 设置会自动触发连接,应先记录其状态,避免把自动重连误认为配置未保存。
-
确认服务器
在 Home 确认选中的服务器或策略组可用。用户已有自己的服务商与订阅时,先保证原配置能完成正常访问,再进行规则实验。
-
保存原配置
进入 Config,确认当前使用的文件,保留原内容。修改其中的 [Rule] 段,检查代理策略名、英文逗号以及 FINAL 的位置。
-
选择规则模式
保存并选用编辑后的配置,回到 Home → Global Routing → Config。必要时断开后重新连接,使后续验证使用新建立的连接。
-
对照两个目标
访问一个你实际填写的目标域名,再访问一个未列入规则的域名。结合请求记录中的主机名、命中规则与策略检查结果,不仅看页面能否打开。
-
检查附属请求
若正文出现但图片或登录失败,检查失败请求的真实域名。只有确认属于需要代理的资源后,才补充对应规则,再重新测试。
浏览器可能复用旧连接,单纯刷新页面未必建立新的连接。修改规则后应结束旧请求并重新发起测试;不要用仍在播放的长连接判断新规则。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 没有覆盖子域名。
以上是系统网络请求可能返回的英文错误文本,具体呈现会随调用方和系统语言变化。诊断时要保留原始文字,并同时记录失败域名与实际策略,而不是只记录“打不开”。
- 所有请求都走代理:检查 Home → Global Routing 是否仍为 Proxy,再查看 FINAL 前是否有范围更大的代理规则。
- 目标网站仍直连:检查是否选用了另一份 Config,或目标域名前面已有 DIRECT 规则;随后核对实际访问的是哪个子域名。
- 页面只显示一部分:页面可能请求另一个资源域名。后缀规则只覆盖指定域名树,不会自动包含页面引用的所有外部资源。
- 直接输入 IP 不符合预期:域名规则不能当作任意 IP 的匹配条件。只有确有固定地址需求时,才考虑单独配置 IP-CIDR,并评估地址变化与共享地址的影响。
六、指定网站分流的常见问题
我只写 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、保存并重新连接后结果保持一致。后续增加网站时,一次添加一组域名并重复验证,保留清楚的修改记录,避免把白名单逐渐变成无法解释的宽泛匹配。