Shadowrocket
规则与配置参考
按配置段、匹配条件与执行策略查阅。先确认请求使用哪份 Config,再解释它为什么命中某条 Rule。
本页是系统查阅手册,不替代首次连接流程。尚未导入已有订阅或服务器信息时,先按快速上手完成添加、连接与验证;遇到规则范围、优先级或配置覆盖问题,再回到对应章节。
配置文件结构与编辑边界
先分清整份配置、规则列表与服务器信息,避免把不同用途的内容相互覆盖。
一份文件,各段承担不同职责
Shadowrocket 的配置文件可以同时包含连接处理参数、分流条件、域名映射和请求重写。方括号中的段名划分这些职责:[General] 保存通用处理选项,[Rule] 保存按顺序检查的规则,[Host] 保存显式域名映射,[URL Rewrite] 保存符合条件的 URL 处理规则。段名不是装饰性标题,放错段落的内容可能不能按预期解析。阅读一份陌生文件时,应先找到这些段落,再逐行解释参数,而不是直接搜索某个域名后粘贴内容。
服务器信息和分流规则也不是同一件事。服务器记录描述连接到哪里、使用哪种协议及认证参数;规则描述一个请求应采用什么策略。仅有 DOMAIN-SUFFIX,example.com,PROXY 并不会创建可用服务器,订阅导入成功也不等于指定的规则文件已经启用。本页始终以用户已有自己的订阅或服务器信息为前提,示例中的域名和地址只用于说明匹配范围,不提供连接资源。
先保存副本,再做单项修改
在 Config 中确认当前选中的文件,记录其名称,并把原始内容保留为独立副本。编辑前查看文件是否来自远程地址,以及后续更新是否会重新下载完整内容。远程配置和服务器订阅即使都表现为一个链接,也可能更新不同对象;应根据实际导入入口与内容判断。不要在未理解更新方式时把远程文件当作永久本地笔记,下一次更新可能覆盖手工插入的规则。
修改时保留原有段名,只在目标段内添加内容。建议先增加一条范围明确的 DOMAIN 规则,再保存、启用并重新建立测试连接;确认结果后才扩大为 DOMAIN-SUFFIX。编辑器显示保存成功,只能说明文本已经写入,不能证明每个关键字、参数和策略都有效。遇到解析提示应先处理提示,不要通过连续添加更多规则掩盖原始错误。
[General]
dns-server = system
[Rule]
DOMAIN,api.example.net,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
[Host]
lab.example.com = 192.168.10.20
这份片段展示配置骨架,不是完整的连接方案。它使用系统 DNS,把指定完整域名交给 DIRECT,把 example.com 及其子域名交给 PROXY,其余请求交给 DIRECT,并给一个实验域名设置固定地址。是否能够实际访问,仍取决于所选服务器、网络可达性、地址是否属于你的环境以及相关服务是否运行。不要把实验地址映射原样用于生产环境。
区分语法有效与用途正确
一行可以在语法上成立,却不符合你的网络目标。例如 FINAL,DIRECT 与 FINAL,PROXY 都表达合法的兜底意图,但两者处理未命中请求的方向完全不同。审核配置不能只看有没有报错,还要问:哪些请求会进入这一行、目标策略是否可用、失败时能否回退。建议为每次修改写下预期输入和预期结果,保留修改前后的差异。
如果文件同时含有多个重复段落或相互冲突的设置,应先整理为清晰结构,再继续排错。不要依赖重复项“最后一个一定生效”之类未经验证的假设。把同一用途的规则放在可阅读的位置,减少重复映射,保留足以说明原因的记录,通常比堆积更多条件更容易维护。
运行姿态与规则生效条件
规则正确只是前提;当前模式、选中配置和连接状态决定它是否进入处理流程。
Config、Proxy、Direct 的职责
查阅规则之前先检查 Home 中的 Global Routing。配置姿态对应 Config,表示按当前配置的分流逻辑处理;代理姿态对应 Proxy,主要用于把请求交给代理方向;直连姿态对应 Direct,主要用于直接访问。后两种姿态不能当作验证 Rule 顺序的替代环境。某个域名在 Proxy 下可以访问,只能说明该测试路径的代理连接有机会工作,不能由此证明 DOMAIN-SUFFIX 写法正确。
本页的规则推演以 Global Routing 为 Config、目标配置已启用且连接已重新建立为基础。若界面中还有 Scene,应先确认当前场景实际采用的配置和策略,不要把场景名称本身当作一条规则。不同设备上的界面组织可能有差异,核对时以当前界面显示的选择结果为准,重点是明确“请求最终使用哪套处理逻辑”,而不是只记住一个按钮的位置。
| 姿态与界面词 | 查阅重点 | 适合的验证用途 |
|---|---|---|
| 配置 / Config | 当前 Config 与 Rule 顺序 | 验证域名、地址和 FINAL 分流 |
| 代理 / Proxy | 所选代理服务器与可达性 | 辅助隔离代理连接问题 |
| 直连 / Direct | 当前网络直接访问能力 | 建立直连路径的比较基线 |
General 不是第二份 Rule
General 中的选项影响更基础的处理环境,例如使用哪个 DNS 来源、是否处理某些地址族,以及哪些目标被排除在特定处理范围之外。它们并不等价于 Rule 中的逐条条件。假如某类请求已经被更早的网络范围设置排除,继续在 Rule 尾部添加针对它的规则可能不会产生预期结果。排错时应同时查看 General,但不应一次改动所有通用参数。
例如 dns-server = system 表示使用系统 DNS 来源;它不表示所有请求都会直连,也不表示 DNS 一定能解析你要访问的域名。代理方向由策略决定,名称解析则为后续连接提供地址,两者需要分别检查。若原配置带有其他 DNS 选项,应先理解它们之间的关系,不要为了让示例看起来一致就整段替换已有设置。
[General]
dns-server = system
[Rule]
DOMAIN,api.example.com,PROXY
FINAL,DIRECT
在这段示例中,只有完整域名 api.example.com 被显式交给 PROXY。Config 下可以据此检查首条条件;切换到其他姿态后,观察到的连接方向不再足以证明这两行的顺序。做对照实验时,先记录模式,再发起相同请求,最后恢复原来的 Config。否则一次临时切换就可能让后续所有规则测试失去共同前提。
连接状态与旧会话
配置保存后,已经建立的长连接可能继续沿原来的路径运行。浏览器连接复用、应用后台会话与名称解析缓存都会影响观察。测试应尽量关闭目标应用的旧会话,按需要断开并重新连接,再发起一个新的请求。不要因为一个仍然播放的媒体连接没有改变方向,就认定新规则没有生效;也不要把页面来自本地缓存的显示当作成功联网。
Connectivity Test 可帮助判断某个服务器的基本连接表现,但它与具体业务请求不是同一个测试对象。服务器测试通过后,目标域名仍可能解析失败,服务端也可能拒绝当前请求。相反,业务页面加载了一部分,也不代表所有相关子域名都采用了同一策略。完整的规则验证应围绕具体请求和匹配结果进行,而不是只依赖一个测试图标。
域名规则的范围与边界
先用完整域名确认需求,再决定是否扩大到后缀或关键词。
DOMAIN:只指定一个完整域名
DOMAIN 的匹配值是域名,不是完整 URL。DOMAIN,api.example.com,PROXY 面向 api.example.com,不会因为页面路径包含这个字符串就匹配其他网站,也不会自动覆盖 www.example.com。填写时不要带上 https://、路径、查询参数或末尾端口。若需要区分同一个域名下的不同路径,域名规则本身不是合适工具,应先确认应用是否真的能够观察到对应请求信息。
完整域名规则适合做小范围例外。例如主站及其他子域名都使用代理方向,但某个内部接口应当直连,可以把接口的 DOMAIN 规则放在宽泛后缀规则之前。这样的排列把“例外优先”清楚地写在文本中。它不是客户端自动赋予完整域名更高权重,而是因为这条规则先被检查;如果把两行位置调换,后面的例外可能没有机会执行。
[Rule]
DOMAIN,intranet.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX:域名后缀与子域名
DOMAIN-SUFFIX,example.com,PROXY 覆盖 example.com 本身以及 api.example.com、img.cdn.example.com 等子域名。它按域名边界理解后缀,不应被当成任意字符串包含:notexample.com 并不属于 example.com 的子域名。通常直接填写基础域名,不需要额外写成 *.example.com;把通配符习惯带入后缀参数反而会增加歧义。
后缀条件适合管理同一域名树,但“同一项服务”不一定只使用一棵域名树。页面可能同时访问独立的登录域名、静态资源域名和接口域名,因此某条主站规则命中后,图片或登录仍可能走不同方向。正确做法是观察实际请求,逐个确认必要域名的用途,而不是把规则扩大到整个公共后缀。对共享托管域名尤其如此,过大的范围会影响不相关的服务。
DOMAIN-KEYWORD:包含关系更宽泛
DOMAIN-KEYWORD 检查域名中是否包含指定关键词。DOMAIN-KEYWORD,example,PROXY 的范围比 example.com 后缀大,可能同时匹配名称中带 example 的其他域名。它不理解这些域名是否属于同一主体,也不会只搜索主域名部分。只有当你明确需要这种广泛包含关系,并且能够接受附带匹配时,才应使用关键词条件。
如果目标只是 api.example.com 和 download.example.com,优先选择完整域名或后缀条件,不要为了少写一行而使用过短关键词。像单个字母或常见缩写这样的条件很难审计,后续新增网站可能在没有修改配置的情况下被意外纳入。维护时应把关键词规则放在容易看到的位置,并给它建立几个应匹配和不应匹配的测试样本。
| 条件 | 示例值 | 范围判断 |
|---|---|---|
| DOMAIN | api.example.com | 仅该完整域名 |
| DOMAIN-SUFFIX | example.com | 本域名及子域名 |
| DOMAIN-KEYWORD | example | 域名中包含该字符串 |
域名可见性与输入清理
域名条件需要处理流程能够关联到域名。如果应用直接连接一个 IP,或请求信息没有保留可用于匹配的名称,域名规则未必能承担预期作用。此时应观察目标地址和日志,而不是把 IP 写进 DOMAIN。对于国际化域名,配置中的形式还需要与实际识别的名称一致;复制时留意全角逗号、不可见空格及混入的 URL 编码字符。
批量整理规则时,先去掉重复项,再检查是否有前面的宽泛条件覆盖后面的精确条件。对于不同策略的重复域名,保留两条并不会实现自动选择,结果仍由位置决定。更基础的范围示例可参阅DOMAIN、GEOIP 与 FINAL 写法入门;回到本页后,应把规则范围与整份配置的顺序一起审阅。
地址段、地址族与 GEOIP
域名回答“叫什么”,地址规则回答“连到哪里”;两者不能相互替代。
IP-CIDR:按网络前缀匹配
IP-CIDR 使用地址和前缀长度描述 IPv4 地址范围。192.168.0.0/16 表示一个以十六位网络前缀划分的地址段,并不是只匹配字符串以 192.168 开头的某个页面 URL。前缀长度越大,范围通常越小;单个 IPv4 地址可用 /32 表达。编辑前先确认目标是整个网段还是单台主机,不要把子网掩码、端口号和 CIDR 前缀混在同一参数中。
局域网服务通常需要直接到达本地地址,但应结合自己的实际网络设置例外。把一个私有地址段交给 DIRECT,并不保证跨网段路由已经存在,也不会自动绕过设备或路由器的访问控制。如果设备连到不同 Wi-Fi 后地址范围发生变化,之前的本地例外可能不再对应同一服务。公司网络、访客网络和家庭网络还可能使用重叠地址,应按当前环境验证。
[Rule]
IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR,10.0.0.0/8,DIRECT
IP-CIDR,172.16.0.0/12,DIRECT
FINAL,PROXY
no-resolve:减少为规则匹配发起的解析
IP 类规则可以使用 no-resolve 参数,表达不为匹配这条规则额外触发域名解析的意图。它适用于已经知道目标地址、或希望避免仅为检查某个地址段而解析名称的情形。不要把它理解为“整个连接都不需要 DNS”,更不能由此断言后续代理端、应用或其他规则不会解析。请求是否已有地址,以及后面还有哪些条件,都会影响实际行为。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,PROXY
这里把明确的域名策略放在前面,把本地地址例外放在后面。若请求只有域名,带 no-resolve 的地址规则不应被当作必然能通过该域名识别私有地址的保证;若请求已经携带目标 IP,则可以根据地址继续判断。配置维护者需要选择自己真正需要的行为:是否愿意为地址分类获得解析结果,还是优先保留域名路径,不能机械地给所有 IP 规则追加同一参数。
IP-CIDR6:单独处理 IPv6 范围
IPv6 不会自动被 IPv4 网段覆盖。若环境中使用 IPv6,必须把相应地址族纳入测试。IP-CIDR6 的匹配值同样使用 CIDR 形式,但地址采用 IPv6 表示法。下面的 2001:db8::/32 是文档示例地址段,适合说明格式,不应作为真实业务网段直接投入使用。实际规则应来自你确认拥有或需要处理的目标地址范围。
[Rule]
IP-CIDR6,2001:db8::/32,DIRECT,no-resolve
FINAL,PROXY
域名同时返回 IPv4 和 IPv6 地址时,应用可能优先尝试其中一种,也可能并行尝试。于是只看一次成功或失败,很难知道是哪条地址规则参与了处理。应分别记录所用地址族和目标 IP,再检查规则覆盖。如果 IPv6 路径存在问题,应先确认网络连通性及配置支持,不要把随意关闭某个地址族当作所有问题的统一答案。
GEOIP:地址归类,不是内容归类
GEOIP,CN,DIRECT 按目标 IP 的地理归属数据进行判断。它不依据网页语言、网站经营者或设备所在位置,也不保证每个地址的归类都与用户预期相同。内容分发网络、共享地址和服务迁移会使同一域名在不同网络获得不同地址;因此某次命中 GEOIP 的结果不宜无限推广到该网站的所有请求。
若业务需要稳定的域名策略,应优先写清域名例外,再使用 GEOIP 作为较宽的地址分类条件。排查归类差异时,记录当时解析到的 IP、测试网络和命中行,避免只说“这个网站应该属于某地”。还应确认当前使用的地理数据是否适合你的用途;任何归类都不能替代对具体目的地址和网络可达性的验证。
策略含义与首条命中
先匹配到的条件决定策略;“更具体”不会自动跳过排在前面的规则。
PROXY、DIRECT、REJECT 的区别
PROXY 表示交给代理方向处理,实际连接仍依赖当前选择及配置引用的有效服务器。DIRECT 表示直接访问目标,不表示“先试代理再失败回退”;REJECT 表示拒绝匹配的请求,也不是性能优化开关。三者解决的是不同意图,不能因为某条请求失败就随机轮换。应先判断目标本应走哪条路径,再验证该路径的地址解析、连接和服务响应。
如果配置使用自定义策略名称,应核对名称是否确实存在,引用是否与定义完全一致。不要把服务器备注名当然地当作可用策略,也不要从其他文件只复制引用而遗漏相关定义。本页用内置方向说明基础逻辑,不包含自定义策略组的完整定义。遇到无法识别的名称时,优先修正引用关系,而不是继续追加同名规则。
从上到下,不做自动“最精确优先”
Rule 的核心阅读方式是自上而下:请求满足某一条条件后,该条策略生效,后续规则不再用于为同一匹配决定另一种策略。规则类型本身没有可以覆盖文本顺序的普遍等级。例如前面有 example.com 的后缀规则,后面再写 api.example.com 的完整域名例外,后者通常已经被前者覆盖。维护大型列表时,这也是最常见的隐性错误之一。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,example,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
以 api.example.com 为例,第一条满足完整域名条件,结果为 DIRECT,不再继续比较后缀。以 www.example.com 为例,第一条不满足,第二条满足,结果为 PROXY。以含 example 但不属于该后缀的其他域名为例,可能落到关键词条件。地址类规则只有在前面的条件没有结束匹配时才有机会参与判断,不能把它们理解为独立叠加的一层强制覆盖。
FINAL 必须是末尾兜底
FINAL 没有单独的匹配值,常见写法是 FINAL,PROXY 或 FINAL,DIRECT。它处理前面没有命中的请求,因此应放在列表最后。把 FINAL 放在中间,会使后面的规则失去正常检查机会;添加新规则时只把它追加到文件末尾,也可能不小心写到了已有 FINAL 后面。每次编辑都应回看末尾位置,而不是只确认新增行存在。
兜底方向应根据自己的网络需求选择,并与测试预期一致。FINAL 不是网络故障时自动接管的备用服务器,也不会在前一条 PROXY 连接失败后继续执行。一次匹配已经确定策略后,连接失败属于该策略路径的后续问题。若误把 FINAL 当作失败回退,就会在代理服务器不可用时不断修改无关的尾部规则,无法触及真正故障。
把顺序设计成可审阅的层次
常见组织方式是先放明确的业务例外,再放适当范围的域名集合,随后放本地地址及地理条件,最后放 FINAL。这只是便于审阅的组织方法,不是所有环境都必须照抄的固定次序。若你的目标明确要求某个地址段高于所有域名条件,就应将其放到更前面,并接受它可能需要地址信息及影响后续域名判断的结果。
审查顺序时,可为每条关键规则列出一个应命中的输入,再列出一个应继续向下的输入。只检查正例会遗漏宽泛匹配造成的覆盖。删除旧规则也要使用同样的方法,因为一条长期看似没有作用的例外,可能只在特定网络、地址族或登录流程中出现。保留清楚的用途记录,比依靠规则数量判断配置质量更可靠。
名称解析与 Host 映射
先区分“名称变成哪个地址”和“连接采用什么策略”,再处理解析差异。
DNS 结果与分流结果是两项观察
DNS 把域名转换为连接需要的地址;Rule 决定匹配请求采用的处理策略。二者会相互影响,但并非同一项设置。一个域名可以解析成功却无法连接,也可能在某条路径上需要由不同位置完成名称解析。分析问题时,至少记录域名、获得的地址、命中规则和最终策略四项信息。仅看到“域名有 IP”不能证明分流正确,仅看到 PROXY 也不能证明目标地址可达。
General 中的 DNS 来源会影响解析环境。使用系统来源时,结果可能随着 Wi-Fi、蜂窝网络和系统网络设置变化;指定其他来源时,也要检查该来源在当前网络是否可达,以及配置是否另有解析行为选项。不要为了追求某个测试结果,未经记录就同时替换 DNS、服务器和规则顺序。这样即使恢复访问,也无法判断真正起作用的是哪一项变化。
Host 只建立显式的名称到地址关系
Host 适合为自己管理的实验服务、固定内部设备或临时迁移测试指定地址。写法通常是域名、等号和地址;它不应该填写页面路径,也不负责存储协议密码。下面的配置把 lab.example.com 指向一个私有地址,并为该域名设置 DIRECT。两部分各自表达一个决定:Host 负责地址映射,Rule 负责处理方向。
[General]
dns-server = system
[Rule]
DOMAIN,lab.example.com,DIRECT
FINAL,PROXY
[Host]
lab.example.com = 192.168.10.20
该地址只在你的网络确实存在相应设备和服务时才有意义。保存映射不会创建服务器,也不会让设备获得访问另一局域网的路由。如果目标服务使用 HTTPS,还必须让证书与访问域名相符;把域名映射到一个能建立 TCP 连接的地址,并不等于 TLS 验证会成功。出现证书错误时应检查域名、证书和服务配置,不要把关闭验证当成 Host 的常规配套步骤。
为什么不应长期固定公共服务的地址
公共服务常通过 DNS 调度到不同区域、不同负载或不同地址族。手工固定某个地址会绕过这一调度过程,短期成功的地址以后可能迁移、停止服务,或不再适合当前网络。共享服务还可能依赖请求中的域名来选择站点。因此 Host 更适合有明确原因、可验证且可撤销的映射,而不是把一次排错获得的 IP 永久写入所有设备。
如果确需临时映射,应记录原始域名、原解析结果、替换地址和恢复方式。完成测试后删除映射,再检查普通解析是否恢复。一个过时的 Host 条目可能让后续所有 DNS 调整看似无效,因为该名称仍被显式指向旧地址。检查这类问题时,应先搜索完整域名是否出现在 Host,而不是只在 General 中更换解析来源。
缓存与地址族造成的观察差异
解析缓存可能存在于系统、应用、浏览器及连接处理流程的不同位置。保存配置后立即刷新页面,有时仍使用之前获得的地址或已有连接。比较映射前后的结果,应建立新的请求会话,必要时重新连接,并观察实际目标地址。不要仅以页面是否再次显示判断缓存是否清空,页面本身也可能来自本地数据。
另一个常见差异是 IPv4 与 IPv6 并存。只映射一个 IPv4 地址、只测试一个地址族,可能不能解释应用的全部连接行为。应结合应用实际访问记录确认它最终选择的地址,再检查 IP-CIDR 与 IP-CIDR6 是否覆盖对应范围。对于直接访问 IP 的请求,Host 域名映射通常不是排错入口,因为此时并没有相应名称需要转换。
USER-AGENT 与 URL Rewrite
这些条件依赖请求信息是否可见,不能当作任意应用或加密内容的识别器。
USER-AGENT 的输入是什么
USER-AGENT 面向请求中可识别的 User-Agent 信息,不是设备上应用名称的通用索引。它不能仅凭一个应用图标就知道所有连接来自哪里,也不应被描述成覆盖全部流量的按应用分流。不同应用可能使用相同的系统网络组件,同一应用也可能在不同请求中提供不同标识,甚至不提供可用于这类匹配的信息。因此使用前必须先确认实际请求中存在什么字段。
[Rule]
USER-AGENT,ExampleApp*,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
这段示例用 ExampleApp 开头的标识说明条件格式,不代表现实中的某个应用一定会匹配。只有处理流程能够获得相应请求信息时,这条条件才有判断依据。对于没有暴露相关字段的连接,应继续依据域名、目标地址等可观察信息分析,不要通过不断增加模糊通配符来弥补输入不存在的问题。
HTTPS 不会自动暴露请求路径与请求头
普通分流所能利用的名称或地址信息,与读取完整加密请求内容是两种能力。能够依据域名做 DOMAIN-SUFFIX 判断,不等于已经能够读取 HTTPS 的路径、查询参数或 User-Agent。规则设计应以实际可见字段为限。不要为了验证一条本不适用的请求头规则,仓促改变证书信任或扩大处理范围;这类变化需要独立理解其安全影响与适用条件。
如果目标只是让某个站点走指定方向,域名规则往往更直接。只有当业务确实依赖请求级条件,而且你能够确认相关信息被处理流程识别时,才考虑 USER-AGENT 等条件。验证时应使用自己控制的测试请求,把输入标识和预期策略对应起来,而不是用某次访问成功反推字段必然已被读到。
URL Rewrite:修改请求目标,不等于选择代理
URL Rewrite 的用途是处理符合表达式的 URL。它与 Rule 的职责不同:Rule 选择策略,重写改变符合条件的请求地址或给出相应重定向行为。下面的示例针对明文 HTTP URL,把 example.com 的请求重定向到相应 HTTPS 地址。表达式中的点需要转义,开头的锚点限制匹配起点,捕获组用于保留原路径。
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
这里的 302 表达临时重定向,客户端后续是否按预期发出新请求,还要看具体请求方式和应用行为。不要假设重定向一定完整保留所有方法与请求体,也不要把浏览器地址栏发生变化理解成所有后台接口都经过了同一条规则。适合的测试目标是一个简单、可观察的请求,确认响应与跳转链后再考虑扩大范围。
正则表达式要限制范围与循环
编写表达式时,先确定协议、域名边界和路径范围,再考虑捕获组。如果域名中的点没有转义,它在正则中可能代表任意字符,从而匹配到意外地址。只写一个宽泛关键词也可能影响查询参数或其他站点。替换目标若仍然满足原表达式,还可能形成重复跳转;应检查“原 URL → 新 URL → 是否再次匹配”这条完整链路。
不要把账号凭据、订阅令牌或业务密钥写入可共享的重写片段。用于教学和记录的请求应清理敏感参数,保留足够复现规则行为的结构即可。真实配置如果必须包含敏感信息,应按个人配置管理,不应作为排错附件公开。复制他人表达式时,也要先阅读目标域名与替换地址,避免只看第一段条件而遗漏后面的实际去向。
配置审核时,应把 URL Rewrite 作为单独清单检查,而不是只审阅 Rule。即使域名分流完全符合预期,错误重写仍可能让请求到达另一条路径。反过来,重写规则存在也不保证它会处理所有连接;请求协议、可见信息和当前配置共同决定了它是否适用。
规则验证、排错与维护
每次只改变一个条件,用新请求核对命中行与实际路径,保留可以恢复的配置。
建立最小且可回退的验证流程
先复制当前可用配置,选择一个你有权测试的目标域名,写下期望策略,再插入一条完整域名规则。确认它位于相关宽泛条件与 FINAL 前面,保存并启用该副本,把 Global Routing 设为 Config。随后建立新连接,观察目标域名、目的地址、命中条件及采用策略。只有这些观察与预期一致,才逐步扩大规则范围或合并到日常配置。
不要直接用一份很长的新配置替换工作环境,再从大量异常中反推原因。对于远程配置,保留原始来源和本地差异;对于会更新的订阅,区分服务器数据变化和规则文件变化。若更新后异常,先确认到底更新了哪个对象。服务器地址或认证信息改变,与 DOMAIN 拼写错误属于不同问题,不能通过同一项规则调整解决。
- 记录当前网络、Config 名称、Global Routing 与测试目标,保存原始副本。
- 只修改一项规则或一个参数,检查所属段及前后覆盖关系。
- 保存并确认当前启用的确实是修改后的文件,重新建立测试会话。
- 对照日志中的域名、地址、规则和策略;必要时用 Direct、Proxy 建立比较基线。
- 恢复 Config,记录结果;未达到预期时撤销该次改动,再检查下一项。
根据现象缩小范围
如果完全没有看到预期规则的命中记录,先查模式、配置选择和请求是否真正在当前会话中发出,再查域名是否写成 URL、是否存在前面的宽泛条件、是否直接连接 IP。如果已经命中 PROXY 但访问失败,应转向所选服务器、协议参数、DNS 和目标服务,而不是继续增加相同域名规则。命中正确与连接成功必须作为两项结果分别记录。
| 现象 | 优先检查 | 下一项验证 |
|---|---|---|
| 修改后方向未变 | Global Routing、当前 Config、旧连接 | 新会话是否命中目标行 |
| 精确域名规则不命中 | 前面的后缀、关键词与 FINAL | 实际域名是否与填写值相同 |
| 命中 PROXY 仍失败 | 服务器状态、协议参数与解析 | 同目标的直连和代理基线 |
| 页面仅部分加载 | 接口、登录和资源的独立域名 | 失败请求是否采用不同策略 |
| 更新后手工规则消失 | 远程配置覆盖与本地副本 | 重新审阅更新前后差异 |
协议排错还应与规则排错分工。例如 Trojan 的地址、端口、密码和 SNI 属于连接参数,可参阅Trojan 参数填写要点;Hysteria2 与网络 UDP 条件的关系可参阅Hysteria2 与 QUIC 说明。协议参数有误时,分流规则即使命中也不能替它补齐认证信息。
分享诊断信息前清理敏感内容
能够解释问题的最小记录通常包含规则片段、所用姿态、目标域名和失败阶段,不需要整份订阅。分享前移除订阅链接中的令牌、服务器密码、身份标识和私人网络信息;截图也要检查地址栏、二维码与通知区域。用 example.com 等教学域名替代时,应说明哪些内容经过替换,但保留规则顺序和语法结构,否则他人无法判断覆盖关系。
维护规则应以实际用途为单位。删除不再使用的 Host、整理重复域名、确认 FINAL 仍在末尾,并为关键业务保留几个测试输入。网络切换后重新检查局域网地址与地址族,不要把家庭 Wi-Fi 的一次验证视为所有场景的保证。规则越多并不意味着范围越准确;能说明每条例外的目的、输入与恢复方式,才便于长期维护。
客户端获取与使用前提
Shadowrocket 是闭源商业应用。iPhone / iPad 版在 App Store $2.99 一次性付费,Mac(Apple 芯片与 Intel)、Windows、安卓、Linux 版免费;客户端一次性买断 ≠ 线路套餐。本站不提供、不销售、不推荐节点或订阅,本手册只解释如何使用用户已有的信息。iPhone / iPad 系统要求以 App Store 页面标注为准,设备获取与系统放行说明统一见全平台下载页,其他平台安装包通过本站 /dl/ 获取。
需要从连接权限和 Home 页面重新核对时,可回到快速上手主线;有关获取、已购恢复与安装的常见问题,见下载常见问题。处理规则问题时始终先保存当前状态,按可复现的最小改动测试;若测试不能解释结果,就撤销改动继续缩小范围,而不是把临时修补长期留在配置中。