Shadowrocket
規則與設定參考
依設定區段、比對條件及執行策略查閱。先確認請求使用哪份 Config,再了解它為何符合某條 Rule。
本頁是系統化查閱手冊,不取代初次連線流程。若尚未匯入自己的訂閱或伺服器資訊,請先依快速上手完成新增、連線與驗證;遇到規則範圍、優先順序或設定覆寫問題,再回到相關章節查閱。
設定檔結構與編輯原則
先區分整份設定檔、規則清單與伺服器資訊,避免不同用途的內容互相覆寫。
一份檔案,各區段各司其職
Shadowrocket 設定檔可同時包含連線處理參數、分流條件、網域對應及請求重寫。方括號中的區段名稱用來劃分用途:[General] 儲存一般處理選項,[Rule] 儲存依序檢查的規則,[Host] 儲存明確的網域對應,[URL Rewrite] 儲存符合條件的 URL 處理規則。區段名稱不是裝飾標題;內容放錯區段,可能無法如預期解析。閱讀陌生檔案時,應先找出這些區段,再逐行解讀參數,而不是直接搜尋某個網域後貼上內容。
伺服器資訊和分流規則也不是同一回事。伺服器資料說明連線目的地、使用的協定及驗證參數;規則則說明請求應採用哪種策略。只有 DOMAIN-SUFFIX,example.com,PROXY 並不會建立可用伺服器;成功匯入訂閱,也不代表指定的規則檔已啟用。本頁以使用者已有自己的訂閱或伺服器資訊為前提,範例中的網域與 IP 僅用來說明比對範圍,不提供連線資源。
先另存副本,再逐項修改
在 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,並為一個測試網域設定固定 IP。實際能否連線,仍取決於所選伺服器、網路可達性、IP 是否屬於你的環境,以及相關服務是否正在執行。請勿將測試用 IP 對應原樣用於正式環境。
區分語法有效與用途正確
一行設定語法可能正確,卻不符合你的網路需求。例如 FINAL,DIRECT 和 FINAL,PROXY 都是合法的兜底設定,但處理未符合其他規則的請求時,方向完全不同。檢查設定檔不能只看有沒有錯誤訊息,還要確認:哪些請求會符合這一行、目標策略是否可用,以及失敗時能否回退。建議每次修改都記下預期輸入和預期結果,並保留修改前後的差異。
如果檔案中有多個重複區段或互相衝突的設定,應先整理出清楚的結構,再繼續疑難排解。不要依賴「重複項目一定以最後一個為準」等未經驗證的假設。將同一用途的規則放在易讀的位置、減少重複對應,並保留足以說明原因的記錄,通常比堆疊更多條件更容易維護。
運作模式與規則生效條件
規則正確只是前提;目前模式、選取的設定檔及連線狀態,才決定規則是否進入處理流程。
Config、Proxy、Direct 的用途
查閱規則前,先檢查 Home 中的 Global Routing。設定模式對應 Config,表示依目前設定檔的分流邏輯處理;代理模式對應 Proxy,主要是將請求交由代理方向處理;直連模式對應 Direct,主要是直接連線。後兩種模式不能取代驗證 Rule 順序的測試環境。某個網域在 Proxy 模式下可以連線,只能表示該測試路徑的代理連線可能正常,不能據此證明 DOMAIN-SUFFIX 寫法正確。
本頁的規則推演以 Global Routing 設為 Config、目標設定檔已啟用且連線已重新建立為前提。若介面中還有 Scene,應先確認目前場景實際採用的設定檔與策略,不要把場景名稱本身當成一條規則。不同裝置的介面配置可能有所差異,核對時以目前介面顯示的選取結果為準;重點是釐清「請求最後採用哪一套處理邏輯」,而不是只記住按鈕的位置。
| 模式與介面用語 | 查閱重點 | 適用的驗證用途 |
|---|---|---|
| 設定 / Config | 目前的 Config 與 Rule 順序 | 驗證網域、IP 與 FINAL 分流 |
| 代理 / Proxy | 所選代理伺服器與連線可達性 | 協助區分代理連線問題 |
| 直連 / Direct | 目前網路的直接連線能力 | 建立直連路徑的比較基準 |
General 不是另一份 Rule
General 中的選項會影響較基礎的處理環境,例如使用哪個 DNS 來源、是否處理特定 IP 位址族,以及哪些目標會排除在特定處理範圍之外。這些選項不等同於 Rule 中逐條檢查的條件。假如某類請求已被較前面的網路範圍設定排除,在 Rule 尾端繼續新增針對它的規則,可能不會得到預期結果。疑難排解時應一併檢查 General,但不要一次更動所有一般參數。
例如 dns-server = system 表示使用系統 DNS 來源;這不代表所有請求都會直連,也不代表 DNS 一定能解析你要連線的網域。代理方向由策略決定,名稱解析則為後續連線提供 IP,兩者需要分開檢查。若原設定檔包含其他 DNS 選項,應先了解它們之間的關係,不要只為了讓範例看起來一致,就整段取代既有設定。
[General]
dns-server = system
[Rule]
DOMAIN,api.example.com,PROXY
FINAL,DIRECT
在這段範例中,只有完整網域 api.example.com 明確交由 PROXY 處理。在 Config 模式下,可依此檢查首條條件;切換至其他模式後,觀察到的連線方向便不足以證明這兩行的順序。進行對照測試時,先記錄模式,再發出相同請求,最後恢復原本的 Config。否則一次臨時切換就可能讓後續所有規則測試失去共同前提。
連線狀態與舊工作階段
設定儲存後,已建立的長連線可能仍沿用原本的路徑。瀏覽器連線重用、應用程式的背景工作階段及名稱解析快取都會影響觀察結果。測試時應盡量關閉目標 App 的舊工作階段,視需要中斷並重新連線,再發出新請求。不要因為仍在播放的影音連線沒有改變方向,就認定新規則未生效;也不要把顯示本機快取頁面當成成功連線。
Connectivity Test 可協助判斷某部伺服器的基本連線狀況,但它測試的對象與特定服務請求不同。伺服器測試通過後,目標網域仍可能解析失敗,伺服器端也可能拒絕目前的請求。反過來說,服務頁面載入部分內容,也不代表所有相關子網域都採用相同策略。完整的規則驗證應針對具體請求及比對結果進行,而不是只依賴單一測試圖示。
網域規則的範圍與界線
先用完整網域確認需求,再決定是否擴大至後綴或關鍵字。
DOMAIN:指定單一完整網域
DOMAIN 的比對值是網域,不是完整 URL。DOMAIN,api.example.com,PROXY 的對象是 api.example.com,不會因為頁面路徑包含這段文字,就比對到其他網站,也不會自動涵蓋 www.example.com。輸入時不要加上 https://、路徑、查詢參數或結尾連接埠。若要區分同一網域下的不同路徑,網域規則並不適合;應先確認 App 是否真的能取得對應的請求資訊。
完整網域規則適合設定小範圍例外。例如主站及其他子網域都走代理方向,但某個內部 API 應直連,就可以將該 API 的 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;將萬用字元的用法套用到後綴參數,反而容易造成歧義。
後綴條件適合管理同一網域樹,但「同一項服務」不一定只使用同一棵網域樹。頁面可能同時連線到獨立的登入網域、靜態資源網域及 API 網域,因此主站規則命中後,圖片或登入仍可能走不同方向。正確做法是觀察實際請求,逐一確認必要網域的用途,而不是把規則擴大到整個公用後綴。共用代管網域尤其如此;範圍過大可能影響無關服務。
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 | 網域中包含此字串 |
網域可見性與輸入檢查
網域條件必須能從處理流程中取得對應網域。如果 App 直接連線至 IP,或請求資訊中沒有保留可供比對的名稱,網域規則未必能發揮預期作用。此時應檢視目標 IP 與記錄,而不是把 IP 填進 DOMAIN。國際化網域的設定形式也需與實際識別到的名稱一致;複製時留意全形逗號、不可見空格及混入的 URL 編碼字元。
批次整理規則時,先移除重複項目,再檢查是否有前面的廣泛條件覆蓋後面的精確條件。對於策略不同的重複網域,保留兩條規則並不會自動選擇,結果仍由排列順序決定。更基礎的範圍範例可參閱DOMAIN、GEOIP 與 FINAL 入門寫法;回到本頁後,應一併檢視規則範圍與整份設定檔的順序。
IP 位址範圍、位址族與 GEOIP
網域回答「名稱是什麼」,IP 規則回答「連到哪裡」;兩者不能互相取代。
IP-CIDR:依網路前綴比對
IP-CIDR 使用 IP 位址與前綴長度描述 IPv4 位址範圍。192.168.0.0/16 表示以 16 位元網路前綴劃分的位址範圍,不是只比對 URL 字串開頭為 192.168 的頁面。前綴長度越大,範圍通常越小;單一 IPv4 位址可用 /32 表示。編輯前先確認目標是整個網段還是單一主機,勿將子網路遮罩、連接埠號碼與 CIDR 前綴混在同一參數中。
區域網路服務通常需要直接連線至本機 IP,但仍應依自己的實際網路設定例外。將某個私有 IP 範圍交由 DIRECT,不代表跨網段路由已存在,也不會自動略過裝置或路由器的存取控制。如果裝置連上不同 Wi-Fi 後 IP 範圍有所變動,先前的本機例外可能已不再對應同一項服務。公司網路、訪客網路和家用網路也可能使用重疊的 IP,應依目前環境驗證。
[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 參數,表示不為比對這條規則而額外觸發網域解析。這適用於已知目標 IP,或希望避免只為檢查某個 IP 範圍而解析名稱的情況。不要將它解讀為「整個連線都不需要 DNS」,也不能據此斷定後續代理端、App 或其他規則不會進行解析。請求是否已有 IP,以及後續還有哪些條件,都會影響實際行為。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,PROXY
此處將明確的網域策略放在前面,再於後方設定本機 IP 例外。如果請求只有網域,含 no-resolve 的 IP 規則不應被視為一定能透過該網域辨識私有 IP;如果請求已帶有目標 IP,則可依 IP 繼續判斷。設定檔維護者應選擇真正需要的行為:是否願意取得解析結果以分類 IP,或優先保留網域路徑;不要機械式地為所有 IP 規則加上相同參數。
IP-CIDR6:分別處理 IPv6 範圍
IPv6 不會自動納入 IPv4 網段規則。若環境使用 IPv6,就必須將相應的位址族納入測試。IP-CIDR6 的比對值同樣使用 CIDR 格式,但位址採用 IPv6 表示法。以下的 2001:db8::/32 是文件範例網段,適合用來說明格式,不應直接套用至實際服務網段。實際規則應依據你確認擁有或需要處理的目標 IP 範圍設定。
[Rule]
IP-CIDR6,2001:db8::/32,DIRECT,no-resolve
FINAL,PROXY
同一網域同時回傳 IPv4 與 IPv6 位址時,App 可能優先嘗試其中一種,也可能同時嘗試。因此只觀察一次成功或失敗,很難判斷是哪條 IP 規則參與處理。應分別記錄使用的位址族與目標 IP,再檢查規則涵蓋範圍。如果 IPv6 路徑有問題,先確認網路連線及設定支援狀況,不要將隨意停用某個位址族當成所有問題的通用解法。
GEOIP:依 IP 分類,而非依內容分類
GEOIP,CN,DIRECT 依據目標 IP 的地理位置資料進行判斷。它不會依網頁語言、網站營運者或裝置所在地判斷,也不保證每個 IP 的分類結果都符合使用者預期。內容傳遞網路、共用 IP 和服務遷移,都可能使同一網域在不同網路取得不同 IP;因此不宜將某次符合 GEOIP 的結果推廣至該網站的所有請求。
若服務需要穩定的網域策略,應優先明確設定網域例外,再將 GEOIP 作為較廣泛的 IP 分類條件。排查分類差異時,記錄當時解析到的 IP、測試網路及命中的規則行,避免只說「這個網站應該屬於某地」。也應確認目前使用的地理資料是否適合你的用途;任何分類結果都不能取代對實際目的 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、但不屬於該後綴,則可能符合關鍵字條件。只有在前面的條件尚未結束比對時,IP 類規則才有機會參與判斷;不要將它們視為可獨立疊加的強制覆寫層。
FINAL 必須放在最後作為兜底規則
FINAL 沒有獨立的比對值,常見寫法為 FINAL,PROXY 或 FINAL,DIRECT。它處理前面未命中的請求,因此應放在清單最後。若將 FINAL 放在中間,後續規則就失去正常檢查的機會;新增規則時若只附加在檔案末尾,也可能不小心放到既有 FINAL 後面。每次編輯都應重新檢查檔案尾端,而不只是確認新增行存在。
兜底方向應依自己的網路需求選擇,並與測試預期一致。FINAL 不是網路故障時會自動接手的備用伺服器,也不會在前一條 PROXY 連線失敗後繼續執行。策略一旦由規則命中確定,後續的連線失敗就是該策略路徑的問題。若誤把 FINAL 當成失敗回退,代理伺服器無法使用時就會不斷修改無關的尾端規則,無法處理真正的故障。
將規則順序整理成易於檢視的層次
常見的編排方式是先放明確的服務例外,再放適當範圍的網域集合,接著放本機 IP 與地理分類條件,最後放 FINAL。這只是方便檢視的編排方式,不是所有環境都必須照抄的固定順序。如果你的目標明確要求某個 IP 範圍優先於所有網域條件,就應將它放在更前面,並接受它可能需要 IP 資訊,也可能影響後續網域判斷。
檢查順序時,可為每條重要規則列出一個應命中的輸入,再列出一個應繼續往下比對的輸入。只檢查正向案例,會漏掉廣泛比對造成的覆蓋。刪除舊規則時也應採用相同方法,因為一條長期看似沒作用的例外,可能只在特定網路、位址族或登入流程中才會觸發。清楚記錄用途,比依規則數量判斷設定檔品質更可靠。
名稱解析與 Host 對應
先區分「名稱對應哪個 IP」和「連線採用什麼策略」,再處理解析差異。
DNS 結果與分流結果是兩項不同觀察
DNS 會將網域轉換為連線所需的 IP;Rule 則決定符合條件的請求採用哪種處理策略。兩者會互相影響,但並非同一項設定。網域可能解析成功卻無法連線,也可能在不同路徑上由不同位置完成名稱解析。分析問題時,至少應記錄網域、取得的 IP、命中的規則及最終策略四項資訊。只看到「網域有 IP」不能證明分流正確,只看到 PROXY 也不能證明目標 IP 可連線。
General 中的 DNS 來源會影響解析環境。使用系統來源時,結果可能隨著 Wi-Fi、行動網路及系統網路設定而變化;指定其他來源時,也應確認該來源在目前網路中是否可連線,以及設定檔是否另有解析行為選項。不要為了追求某個測試結果,就在未記錄的情況下同時更換 DNS、伺服器及規則順序。即使恢復連線,也無法判斷真正起作用的是哪項變更。
Host 僅建立明確的名稱與 IP 對應
Host 適合為自己管理的測試服務、固定的內部裝置或暫時性的遷移測試指定 IP。格式通常是網域、等號及 IP;不應填入頁面路徑,也不負責儲存協定密碼。以下設定會將 lab.example.com 指向一個私有 IP,並為該網域指定 DIRECT。兩部分各自表達不同決定:Host 負責 IP 對應,Rule 負責處理方向。
[General]
dns-server = system
[Rule]
DOMAIN,lab.example.com,DIRECT
FINAL,PROXY
[Host]
lab.example.com = 192.168.10.20
只有在你的網路中確實有對應裝置及服務時,該 IP 才有意義。儲存對應並不會建立伺服器,也不會讓裝置自動取得通往另一個區域網路的路由。如果目標服務使用 HTTPS,憑證也必須與存取網域相符;將網域對應到可建立 TCP 連線的 IP,不代表 TLS 驗證一定會通過。遇到憑證錯誤時,應檢查網域、憑證及服務設定,不要把停用驗證當成使用 Host 的一般步驟。
為什麼不應長期固定公用服務的 IP
公用服務常透過 DNS 將連線導向不同區域、負載或位址族。手動固定某個 IP 會略過這項調度;短期可用的 IP 日後可能遷移、停止服務,或不再適合目前網路。共用服務也可能依請求中的網域選擇網站。因此,Host 較適合用於有明確原因、可驗證且可撤銷的對應,不應將疑難排解時取得的 IP 永久寫入所有裝置。
如果確實需要暫時建立對應,應記錄原始網域、原解析結果、替代 IP 及復原方式。測試完成後刪除對應,再檢查一般解析是否恢復。過期的 Host 項目可能讓後續 DNS 調整看似無效,因為該名稱仍被明確指向舊 IP。檢查這類問題時,應先在 Host 搜尋完整網域,而不是只在 General 中更換解析來源。
快取與位址族造成的觀察差異
系統、App、瀏覽器及連線處理流程的不同位置都可能存在解析快取。儲存設定後立即重新整理頁面,有時仍會使用先前取得的 IP 或既有連線。比較建立對應前後的結果時,應建立新的請求工作階段,必要時重新連線,並觀察實際目標 IP。不要只根據頁面是否再次顯示來判斷快取是否已清除;頁面內容本身也可能來自本機資料。
另一項常見差異是 IPv4 與 IPv6 並存。只對應一個 IPv4 位址、只測試一種位址族,可能無法解釋 App 的所有連線行為。應查看 App 的實際存取記錄,確認最後選用的 IP,再檢查 IP-CIDR 與 IP-CIDR6 是否涵蓋相應範圍。對於直接連線至 IP 的請求,Host 網域對應通常不是疑難排解的切入點,因為此時沒有需要轉換的名稱。
USER-AGENT 與 URL Rewrite
這些條件取決於請求資訊是否可見,不能當成辨識任意 App 或加密內容的工具。
USER-AGENT 讀取的是什麼
USER-AGENT 用於比對請求中可識別的 User-Agent 資訊,不是索引裝置上 App 名稱的通用方式。它無法只憑 App 圖示判斷所有連線的來源,也不應被描述為可涵蓋所有流量的依 App 分流。不同 App 可能使用相同的系統網路元件;同一個 App 也可能在不同請求中提供不同識別資訊,甚至不提供可供比對的資訊。因此,使用前必須先確認實際請求中有哪些欄位。
[Rule]
USER-AGENT,ExampleApp*,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
這段範例以 ExampleApp 開頭的識別資訊說明條件格式,不代表現實中的某個 App 一定會符合。只有在處理流程可取得對應請求資訊時,這條條件才有判斷依據。對於未公開相關欄位的連線,應依據網域、目標 IP 等可觀察資訊繼續分析,不要用不斷增加模糊萬用字元的方式彌補資訊不存在的問題。
HTTPS 不會自動公開請求路徑與標頭
一般分流可使用的名稱或 IP 資訊,與讀取完整的加密請求內容是兩種不同能力。能依網域進行 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 表示暫時重新導向;用戶端後續是否會依預期送出新請求,還要視具體請求方式與 App 行為而定。不要假設重新導向一定會完整保留所有方法與請求本文,也不要把瀏覽器網址列變更,視為所有背景 API 都套用了同一條規則。適合的測試目標是簡單且容易觀察的請求;確認回應與重新導向鏈後,再考慮擴大範圍。
正規表示式應限制比對範圍並避免循環
撰寫表示式時,先確認協定、網域界線及路徑範圍,再考慮擷取群組。若網域中的句點未跳脫,在正規表示式中可能代表任意字元,導致意外比對其他網址。只寫一個範圍過廣的關鍵字,也可能影響查詢參數或其他網站。如果替換後的目標仍符合原表示式,還可能形成重複重新導向;應完整檢查「原始 URL → 新 URL → 是否再次符合」這條流程。
不要將帳號憑證、訂閱權杖或服務金鑰寫進可分享的重寫範例。用於教學與記錄的請求應清除敏感參數,只保留足以重現規則行為的結構。真實設定若必須包含敏感資訊,應自行妥善管理,不要將其作為疑難排解附件公開。複製他人的表示式時,也要先檢查目標網域與替換網址,避免只看前段條件而忽略實際導向的位置。
檢查設定檔時,應將 URL Rewrite 當成獨立清單檢查,而不只是檢視 Rule。即使網域分流完全符合預期,錯誤的重寫仍可能讓請求走向另一條路徑。反過來說,存在重寫規則也不代表它會處理所有連線;請求協定、可見資訊及目前設定檔共同決定規則是否適用。
規則驗證、疑難排解與維護
每次只變更一個條件,以新請求確認命中規則與實際路徑,並保留可復原的設定。
建立精簡且可復原的驗證流程
先複製目前可正常使用的設定檔,選擇一個你有權測試的目標網域,寫下預期策略,再新增一條完整網域規則。確認它位於相關廣泛條件與 FINAL 之前,儲存並啟用此副本,將 Global Routing 設為 Config。接著建立新連線,觀察目標網域、目的 IP、命中條件及採用策略。只有上述觀察結果符合預期,才逐步擴大規則範圍或合併至日常設定檔。
不要直接用一份很長的新設定檔取代正在使用的環境,再從大量異常中反推原因。對遠端設定檔,保留原始來源與本機差異;對會更新的訂閱,區分伺服器資料變更與規則檔變更。更新後若出現異常,先確認實際更新了哪個項目。伺服器位址或驗證資訊變更,與 DOMAIN 拼寫錯誤是不同問題,不能靠調整同一項規則解決。
- 記錄目前網路、Config 名稱、Global Routing 及測試目標,並保留原始副本。
- 一次只修改一條規則或一項參數,檢查所屬區段及前後規則的覆蓋關係。
- 儲存後確認目前啟用的是修改後的檔案,並重新建立測試工作階段。
- 對照記錄中的網域、IP、規則與策略;必要時以 Direct、Proxy 建立比較基準。
- 恢復 Config 並記錄結果;若未達預期,撤銷此次變更,再檢查下一項。
依觀察到的現象縮小範圍
若完全沒有看到預期規則的命中記錄,先檢查模式、設定檔選擇,以及請求是否確實在目前工作階段中送出;接著確認網域是否誤填成 URL、前方是否已有廣泛條件,或請求是否直接連線至 IP。如果已命中 PROXY 但仍無法連線,應轉而檢查所選伺服器、協定參數、DNS 及目標服務,而不是繼續新增相同網域規則。應將規則命中與連線成功分別記錄。
| 現象 | 優先檢查項目 | 下一步驗證 |
|---|---|---|
| 修改後連線方向未變 | Global Routing、目前的 Config、舊連線 | 新工作階段是否命中目標規則 |
| 精確網域規則未命中 | 前方的後綴、關鍵字與 FINAL | 實際網域是否與輸入值相同 |
| 命中 PROXY 仍無法連線 | 伺服器狀態、協定參數與解析結果 | 同一目標的直連與代理基準 |
| 頁面只有部分內容載入 | API、登入與資源是否使用不同網域 | 失敗的請求是否採用了不同策略 |
| 更新後手動新增的規則消失 | 遠端設定檔覆寫與本機副本 | 重新檢視更新前後的差異 |
協定疑難排解也應與規則問題分開處理。例如 Trojan 的位址、連接埠、密碼及 SNI 屬於連線參數,可參閱Trojan 參數填寫要點;Hysteria2 與網路 UDP 條件的關係可參閱Hysteria2 與 QUIC 說明。即使分流規則命中,協定參數錯誤也無法替它補上驗證資訊。
分享診斷資訊前,先清除敏感內容
足以說明問題的精簡記錄通常包含規則片段、使用的模式、目標網域及失敗階段,不需要提供整份訂閱。分享前請移除訂閱連結中的權杖、伺服器密碼、身分識別資訊及私人網路資訊;截圖也要檢查網址列、QR Code 與通知區域。以 example.com 等教學網域替換時,應註明哪些內容已替換,同時保留規則順序與語法結構,否則他人無法判斷覆蓋關係。
以實際用途為單位維護規則。移除不再使用的 Host、整理重複網域、確認 FINAL 仍位於末尾,並為重要服務保留幾個測試輸入。切換網路後,重新檢查區域網路 IP 與位址族;不要把在家用 Wi-Fi 上的一次驗證當成所有情況的保證。規則越多不代表範圍越精確;能說明每條例外的目的、輸入及復原方式,才便於長期維護。
用戶端取得方式與使用前提
Shadowrocket 是閉源商業應用。iPhone / iPad 版在 App Store 售價 $2.99,為一次性付費;Mac(Apple 晶片與 Intel)、Windows、Android、Linux 版免費。用戶端一次買斷不等於線路方案。本網站不提供、不銷售也不推薦節點或訂閱;本手冊僅說明如何使用你已有的資訊。iPhone / iPad 系統需求請以 App Store 頁面標示為準;各平台取得方式與系統允許安裝的說明,請參閱全平台下載頁;其他平台的安裝檔請透過本站 /dl/ 取得。
若要重新檢查連線權限及 Home 頁面,可回到快速上手流程;取得、已購項目還原及安裝的常見問題,請參閱下載常見問題。處理規則問題時,請先儲存目前狀態,再以可重現的最小變更進行測試;若測試結果無法解釋,便撤銷變更並繼續縮小範圍,不要將臨時修補永久留在設定檔中。