Shadowrocket 分流规则写法:只让指定网站走 PROXY 的场景配置

以 DOMAIN-SUFFIX、DOMAIN-KEYWORD 和 FINAL,DIRECT 为例,讲清怎样只让少数网站走代理、其余直连,以及规则顺序对匹配结果的影响。

本文速览

本文适合已经在 Shadowrocket(小火箭)中导入自己的服务器配置、希望仅让指定网站使用 PROXY 的用户。操作重点是启用 Global Routing → Config,在当前配置中先列出目标域名,再用 FINAL,DIRECT 处理剩余请求;完成后通过请求记录确认实际命中的规则,而不是仅凭连接图标判断分流结果。

一、先确认 Global Routing 与配置的分工

“只让指定网站走 PROXY”属于按规则分流,不是把连接开关打开就自动实现。Home 中选择的服务器提供代理出口,Config 中启用的配置决定哪些请求使用这个出口。本文以用户已有自己的服务商与订阅为前提,不涉及连接资源的获取。

在 Home 打开 Global Routing,选择 Config,再检查 Config 中当前启用的配置。Proxy 会把可由该模式处理的流量交给代理,Direct 则直接连接;这两种姿态都不适合验证本文的逐条规则。Scene 用于按场景选择路由行为,初次排查时先固定为 Config,减少场景切换带来的变量。

请求进入隧道 读取路由模式 逐条匹配规则 确定出口策略 建立目标连接

PROXY 是规则中的策略名,Global Routing 中的 Proxy 是路由模式,两者不要混淆。DIRECT 表示直接连接目标,并不表示请求没有经过系统 VPN 隧道。状态栏出现 VPN 标识,只能说明隧道处于连接状态,不能证明某个网站使用了代理出口。

二、写出最小规则:指定域名 PROXY,其余 DIRECT

编辑前先备份当前配置,保留可恢复的副本。下面是规则结构示例,example.com 为说明用途的示例域名,应替换为自己确实需要匹配的网站域名。它不是订阅地址,也不是服务器地址。

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

每行用英文逗号分隔字段。第一行中的 DOMAIN-SUFFIX 匹配 example.com 本身及其子域名,例如 www.example.com 和 static.example.com,不匹配 notexample.com。最后一行 FINAL,DIRECT 不再检查域名条件,把此前没有命中的请求交给 DIRECT。

  1. 进入 Config,找到当前启用的配置,先保存备份或创建副本。
  2. 打开该配置的编辑入口,找到 Rule 对应的规则内容;使用文本编辑时定位 [Rule]。
  3. 把目标域名规则放在需要被它覆盖的宽泛规则之前,把 FINAL,DIRECT 放在规则末尾。
  4. 保存并启用这份配置,回到 Home,再次核对 Global Routing 为 Config。
  5. 重新发起测试请求;若仍观察到旧连接的行为,结束原连接后再测试,必要时重新连接隧道。

不要把整段内容重复追加到配置末尾,造成多个 [Rule] 段或多个 FINAL。还应核对 PROXY 所指向的出口是否可用;规则决定去向,不能修复服务器不可达、认证信息错误或服务端配置不一致的问题。

三、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD 怎样选

只处理少数明确网站时,优先从 DOMAIN-SUFFIX 开始。它按照域名边界匹配,比关键词搜索更容易控制范围。若只想处理单个主机而不包含它的其他子域名,可使用 DOMAIN 精确匹配。

按域名边界匹配

关键字
DOMAIN-SUFFIX
完整规则
DOMAIN-SUFFIX,example.com,PROXY
命中示例
example.com、img.example.com
不命中示例
notexample.com

适合明确知道网站主域名,并需要覆盖其子域名的场景。

按域名字符串匹配

关键字
DOMAIN-KEYWORD
完整规则
DOMAIN-KEYWORD,example,PROXY
命中示例
example.com、notexample.com
范围风险
可能包含无关网站

关键词不是品牌识别,必须根据请求记录检查实际覆盖范围。

DOMAIN-KEYWORD 检查域名中是否出现指定字符串,不是搜索完整 URL。例如 https://www.example.com/video?id=8 的路径 /video 与查询参数 id=8 不属于该规则的匹配对象。把 https://、路径或页面标题写进域名字段,不能得到按网页路径分流的效果。

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

这组规则明确保留了一个例外:login.example.com 直连,其他属于 example.com 的域名使用 PROXY。若同一配置中还加入了宽泛的 DOMAIN-KEYWORD,应重新检查它是否把原本希望直连的网站也包含进来。

四、规则顺序:先处理例外,再处理通用条件

规则按顺序检查,请求命中后使用对应策略,不会因为后面出现更精确的条件就自动改判。因此,“精确例外在前、范围规则在后、FINAL 最后”是更容易维护的组织方式。

排列方式请求域名预期结果
DOMAIN 精确例外在 DOMAIN-SUFFIX 前 login.example.com 先命中例外,DIRECT
DOMAIN-SUFFIX 在精确例外前 login.example.com 先命中后缀规则,PROXY
FINAL 在目标域名规则前 www.example.com 先由 FINAL 处理,后续规则无法命中
只有目标后缀规则与末尾 FINAL,DIRECT www.example.net 不匹配目标后缀,最终 DIRECT

判断方法:把待测域名从第一条规则开始代入

遇到第一条匹配条件就记录其策略;如果它已经给出结果,先调整这一条的位置或范围,不要继续在列表末尾追加补丁。

GEOIP 和 IP-CIDR 处理的条件与域名规则不同。GEOIP 根据目标 IP 的地理数据库结果匹配,IP-CIDR 根据地址范围匹配;它们不能准确表达“某个网站品牌”。同一个网站可能使用多个地区的地址,同一个地址也可能承载多个网站。

五、保存后怎样验证,而不是只看网页能否打开

网页成功打开只能说明请求有可用路径,不能证明出口正确。建议先用一个目标域名与一个非目标域名做对照,再增加子域名和例外域名。以下是验收条件,不是对任何网络环境的测速结果。

  1. 在 Home 确认已选择可用服务器,Global Routing 为 Config,且连接已建立。
  2. 打开当前请求记录或连接详情,清理筛选条件,再重新访问目标页面,避免把旧记录当作新结果。
  3. 查找目标主机名,核对命中的规则与出口策略。目标域名应命中指定的 DOMAIN 或 DOMAIN-SUFFIX,并使用 PROXY。
  4. 访问一个未列入规则的域名,确认它由 FINAL,DIRECT 处理。若命中其他规则,返回 Config 检查前置条目。
  5. 测试例外域名与目标子域名,最后再打开完整页面,检查图片、登录与视频请求是否各自符合预期。

一个页面不等于一个域名。页面正文、静态资源、登录接口与媒体内容可能来自不同主机。若首页正常但图片不显示,先在请求记录中定位失败资源的真实域名,再决定是否补充一条规则,不要直接把短而宽泛的关键词加入配置。

六、常见问题:改了规则仍不符合预期

为什么加了 FINAL,DIRECT,还是很多网站走 PROXY?

先在 Home → Global Routing 确认选择 Config,再查看请求命中的第一条规则。若前面仍有 DOMAIN-KEYWORD、规则集或 IP 条件指向 PROXY,应调整那些条目;FINAL 只接收前面没有处理的请求。

只想让一个子域名走代理,怎么避免整个网站都被包含?

使用 DOMAIN,video.example.com,PROXY,末尾保留 FINAL,DIRECT。同时检查并移除与目标冲突的宽泛后缀或关键词规则,再分别测试 video.example.com 与 www.example.com。

更新自己的订阅后,为什么出口或配置表现变了?

先区分服务器订阅更新与远程配置更新。前者可能改变可选服务器,后者可能改动 Rule。回到 Home 核对选中服务器,再到 Config 核对启用文件及规则内容;将本地修改保存在独立副本,更新前后进行比较。

关闭 On Demand 才能分流吗?

不需要。Settings → On Demand 决定何时按条件建立连接,Config 中的 Rule 决定连接建立后如何分流。排查时可以暂时手动连接,固定测试条件;规则验证通过后,再恢复适合自己网络环境的 On Demand 设置。

维护时一次只改一个变量:先确认出口可用,再确认模式,随后检查启用文件、匹配条件与顺序。对新增域名记录添加原因,并保留一组固定测试目标。这样出现异常时,可以回退最近一次变更,而不必重写整份配置。

App Store 正版入口 先核对开发者与应用 ID