路由规则
路由规则(Response Rules,SRR)是一组有序规则, 面板据此决定对订阅请求返回什么。判定依据 是请求的 HTTP 头:可以给客户端返回另一种格式、另一个模板 或另一组请求头,也可以直接拒绝。
说明
规则在面板侧工作,不会进入节点。Xray 自身的
路由(routing.rules)在配置配置文件中定义并应用到节点——
参见配置配置文件。
在哪里配置
规则以 responseRules 对象的形式保存在订阅设置中,
并在规则管理区域中编辑:
{
"version": "1",
"settings": { "disableSubscriptionAccessByPath": false },
"rules": []
}
disableSubscriptionAccessByPath: true 会关闭通过
附加路径(/json、/mihomo、/stash)访问订阅的权限。
生效顺序
规则自上而下检查。第一个匹配的规则生效,
检查随即停止。enabled: false 的规则会被跳过。如果
没有任何规则匹配,请求会被阻止——因此最后通常会放一条
无条件的规则,用来返回普通订阅。
操作符与条件
规则的 operator 决定条件如何组合:
| 操作符 | 规则何时匹配 |
|---|---|
AND | 所有条件都匹配 |
OR | 至少一个条件匹配 |
空的 conditions 数组始终匹配——这就是「默认规则」。
每个条件检查一个请求头:
{
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ",
"caseSensitive": false
}
| 条件操作符 | 检查 |
|---|---|
EQUALS、NOT_EQUALS | 精确匹配 |
CONTAINS、NOT_CONTAINS | 包含子串 |
STARTS_WITH、NOT_STARTS_WITH | 字符串开头 |
ENDS_WITH、NOT_ENDS_WITH | 字符串结尾 |
REGEX、NOT_REGEX | 正则表达式 |
请求头名称不区分大小写,同一个请求头的多个值 用逗号拼接,而缺失的请求头意味着 条件不成立。
响应类型
responseType 决定匹配时客户端会收到什么:
| 类型 | 响应 |
|---|---|
XRAY_JSON、XRAY_BASE64、MIHOMO、CLASH、STASH、SINGBOX | 相应格式的订阅 |
BROWSER | 给浏览器的 HTML 页面 |
BLOCK | 拒绝,HTTP 403 |
STATUS_CODE_404、STATUS_CODE_451 | 以 404 或 451 状态码拒绝 |
SOCKET_DROP | 断开连接 |
响应修改
responseModifications 块用于细化响应:
subscriptionTemplate—— 模板名称;优先级高于外部分组的设置;headers和applyHeadersToEnd—— 添加请求头,必要时放在 最后,覆盖其他请求头;ignoreHostXrayJsonTemplate—— 不使用主机的 Xray JSON 模板;ignoreServeJsonAtBaseSubscription—— 即使对通常返回 JSON 的客户端 也返回 base64;disableHwidCheck—— 对该规则不检查 HWID;additionalExtendedClientsRegex—— 扩展「扩展客户端」列表;excludeHostsByTags—— 从下发中移除带有指定标签的主机;respondWithRemarks—— 用文本替换响应体。
提示
典型场景:给 Android 客户端返回单独的 JSON 模板,而给
过时的应用返回 BLOCK。面板在编辑时会显示这样一条规则的
示例。
危险
无条件且 responseType: BLOCK 的规则会阻止所有走到
它的请求。请按精确度递减的顺序放置规则,并在每次
修改后检查订阅。