回應規則
注意
如果您不確定所做的更改,請謹慎操作。錯誤的修改可能會中斷系統。
回應規則(SRR)是一組有序的(從上到下;如果規則適用,則停止評估)JSON 規則,後端會對傳入的訂閱請求進行評估。
提示
回應規則將覆蓋外部小隊設定。
建立自訂回應規則
讓我們建立一個自訂回應規則,為使用 Happ 客戶端應用程式的 Android 使用者提供自訂範本和自訂標頭。
其運作方式如下:
- 使用者請求訂閱
- Remnawave 識別出他正在 Android 上使用 Happ。
- Remnawave 用自訂
Happ Android範本回應,並新增自訂標頭HappTheBestAppOnTheWorld。
規則可能如下所示:
{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND", // Both "user-agent" and "x-device-os" must be matched
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "EQUALS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android", // Serve the custom Template
"headers": [ // Serve the custom headers
{
"key": "x-provider-id",
"value": "HappTheBestAppOnTheWorld"
}
]
}
}
rules
每條規則是一個包含以下欄位的物件:
-
name(string) — 必填;1..50 個字元"name": "Block Legacy Clients" -
description(string) — 選填;最多 250 個字元"description": "Blocks requests from legacy clients" -
enabled(boolean) — 必填
控制規則是否啟用。當為false時,規則在評估期間被跳過。"enabled": true -
operator(enum) — 必填;AND或OR"operator": "AND" // Rule matches only if ALL conditions match
"operator": "OR" // Rule matches if ANY condition matches -
conditions(array)
要評估的條件清單。"conditions": [] // Empty = match everything (use for fallback rules) -
responseType(enum) — 必填
確定規則符合時發送何種回應:類型 描述 MIHOMOMihomo YAML 設定 CLASHClash YAML 設定 STASHStash YAML 設定 SINGBOXSing-box JSON 設定 XRAY_JSONXray JSON 設定 XRAY_BASE64Base64 編碼的 Xray 設定 BROWSER瀏覽器 HTML 頁面 BLOCKHTTP 403 Forbidden STATUS_CODE_404HTTP 404 Not Found STATUS_CODE_451HTTP 451 Unavailable For Legal Reasons SOCKET_DROP斷開 socket 連線 -
responseModifications(array) - 選填
套用於回應的額外修改。可用於提供自訂範本或標頭。subscriptionTemplate(string) - 選填
定義規則符合時要提供的特定範本。headers(array) - 選填
使用自訂標頭回應。key(string) - 選填
標頭名稱。value(string) - 選填
標頭值。
applyHeadersToEnd(boolean) - 選填
預設情況下,標頭在形成回應時被新增。在某些情況下,SRR 中設定的標頭可能被系統其他部分(如外部小隊)的標頭覆蓋。如果將此旗標設定為true,SRR 的標頭將在回應發送前的最後階段新增。在這種情況下,SRR 標頭可能會覆蓋其他部分的標頭。ignoreHostXrayJsonTemplate(boolean) - 選填
每個主機可以有自己的 Xray Json 範本。如果將此旗標設定為true,將使用 SRR 定義的 Xray Json 範本。主機的 Xray Json 範本將被忽略。ignoreServeJsonAtBaseSubscription(boolean) - 選填
在某些情況下,當啟用Serve JSON at Base Subscription時,您可能希望向面板識別為能夠接受XRAY_JSON的客戶端應用程式提供XRAY_BASE64。
如果將此旗標設定為true,Serve JSON at Base Subscription設定將被忽略(設定為false)。disableHwidCheck(boolean) - 選填
某些情況下,客戶端應用程式可能需要忽略 HWID 檢查。如果將此旗標設定為true,將忽略 HWID 支援檢查。
"responseType": "SINGBOX",
"responseModifications": {
"applyHeadersToEnd": true,
"headers": [
{
"key": "X-Custom-Header",
"value": "CustomValue"
}
],
"ignoreHostXrayJsonTemplate": true,
"ignoreServeJsonAtBaseSubscription": true,
"subscriptionTemplate": "Singbox Legacy"
}
rules.conditions
-
headerName(string) — 必填
要檢查的 HTTP 標頭。必須符合 RFC 7230。"headerName": "user-agent" // Client app user-agent -
operator(enum) — 必填
要執行的比較操作:運算子 描述 EQUALS完全符合 NOT_EQUALS反向完全符合 CONTAINS子字串存在 NOT_CONTAINS子字串不存在 STARTS_WITH前綴符合 NOT_STARTS_WITH前綴不存在 ENDS_WITH後綴符合 NOT_ENDS_WITH後綴不存在 REGEX正規表示式 NOT_REGEX反向正規表示式 -
value(string) — 必填;1..255 個字元
與標頭值進行比較的值。"value": "^sfa|sfi|sfm|sft|karing|singbox|rabbithole" -
caseSensitive(boolean) — 必填"caseSensitive": true // The value is compared as is
"caseSensitive": false // The value is lowercased before comparison
提供特定作業系統的範本
您可以輕鬆地為不同作業系統回應不同的範本。
在下面的範例中,iOS 使用者將獲得 Happ iOS JSON,Android 使用者將獲得 Happ Android JSON。
{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android"
}
},
{
"name": "Happ iOS",
"description": "Serve custom JSON for iOS",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "ios"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ iOS"
}
}
標頭解析規則
- 標頭名稱不區分大小寫
"user-agent" === "User-Agent" === "USER-AGENT" - 如果標頭有多個值,它們將連接成一個字串,以逗號分隔。
- 標頭值缺失會導致規則被跳過。