Shadowrocket(小火箭)若要只讓指定網站走代理,需同時符合三個條件:在 Home → Global Routing 選擇 Config、在目前設定中先加入目標網域的代理規則,最後用 FINAL,DIRECT 處理其他連線。本文適合已備妥可用伺服器設定的使用者,提供精簡規則範例、匹配範圍與驗證步驟;範例網域僅用於說明語法,不代表可用線路。
一、先確認 Config 模式與策略名稱
「只讓指定網站走代理」屬於規則分流,不是開啟連線開關就會自動完成。Home 中的 Global Routing 決定目前連線採用哪種路由方式;Config 頁面則用來管理設定檔。兩者名稱相近,作用卻不同:前者決定是否依規則處理,後者決定使用哪一份規則。
| 選項 | 用途 | 本文的處理方式 |
|---|---|---|
Config | 依目前設定中的規則決定策略 | 選擇此項後驗證指定網域 |
Proxy | 以代理方式處理流量 | 不適用於驗證「其他網站直連」的規則目標 |
Direct | 以直連方式處理流量 | 無法據此驗證網域代理規則是否生效 |
Scene | 由使用情境設定決定路由行為 | 本次測試先切換至 Config,減少情境條件的干擾 |
規則的第三個欄位是策略,不是協定名稱。DIRECT 代表直連;本文以 PROXY 表示已存在且可用的代理策略。編輯前請確認目前設定能正確解析此名稱,且該策略指向預期的伺服器。若使用自訂策略組,請將範例中的 PROXY 換成該組的正確名稱,切勿直接複製不存在的名稱。
二、DOMAIN-SUFFIX 的精簡設定與匹配範圍
若要讓 example.com 及其子網域走代理,其他連線則直連,可在設定檔的 [Rule] 區段加入以下兩條規則。這只是規則片段,並非包含伺服器、策略組及其他設定的完整設定檔;請勿用它覆蓋整份既有檔案,也不要在檔案中重複建立多個規則區段。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX 會依網域後綴邊界進行匹配。填入網域本身即可,不必加上 https://、路徑或 :443,也不必寫成 *.example.com。此規則涵蓋根網域及其子網域,但不會因其他網域剛好包含相同字母而匹配。
| 請求目標 | 是否匹配 | 上述精簡規則的結果 |
|---|---|---|
example.com | 是 | PROXY |
www.example.com | 是 | PROXY |
api.example.com | 是 | PROXY |
notexample.com | 否 | DIRECT |
example.net | 否 | DIRECT |
若只想讓 www.example.com 走代理,而同一網站的 api.example.com 必須直連,請使用精確網域規則 DOMAIN,www.example.com,PROXY,不要擴大至整個根網域。規則應依實際請求的主機名稱撰寫,不要把網站名稱或頁面標題當成網域。
三、如何選擇 DOMAIN-KEYWORD 與規則順序
DOMAIN-KEYWORD 會檢查網域是否包含指定字串,匹配範圍比後綴規則更廣。例如 DOMAIN-KEYWORD,example,PROXY 不只可能匹配 example.com,也可能匹配 notexample.com。若要精確列出少數網站,優先使用 DOMAIN 或 DOMAIN-SUFFIX;不要為了少寫幾行而擴大匹配範圍。
規則通常由上而下依序判斷,由第一條匹配的規則決定策略。較具體的例外規則必須排在範圍較廣的規則之前。以下範例會讓 static.example.com 直連,其他屬於 example.com 的網域走代理,其餘連線仍然直連。
[Rule]
DOMAIN,static.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
結論:先列例外,再列範圍,最後設定預設規則
儲存前請由第一行往下檢查:精確例外是否優先匹配、後綴範圍是否過大,以及 FINAL 是否確實位於末尾。依此順序檢查,比不斷追加重複的網域規則更容易找出衝突。
若沿用的設定中還有 GEOIP、IP-CIDR 或外部規則集,FINAL,DIRECT 不會覆蓋這些規則已作出的判斷。若要嚴格做到「只有指定網站走代理」,也須檢查前面是否已有其他指向代理的規則。不要只修改最後一行,就把整份既有設定視為白名單模式。
四、在 Home 與 Config 中套用並驗證
以下步驟每次只調整規則與路由模式,不同時變更 DNS、伺服器協定或 On Demand。如此一來,若連線結果改變,就能判斷是否由這次規則修改所致。若 Settings → On Demand 已設定自動觸發連線,請先記錄其狀態,避免將自動重新連線誤認為設定未儲存。
-
確認伺服器
在 Home 確認目前選取的伺服器或策略組可正常使用。若已有自己的服務供應商與訂閱,請先確認原設定能正常連線,再進行規則測試。
-
保存原始設定
進入 Config,確認目前使用的檔案並保留原始內容。修改其中的 [Rule] 區段,檢查代理策略名稱、英文逗號及 FINAL 的位置。
-
選擇規則模式
儲存並選用編輯後的設定,返回 Home → Global Routing → Config。必要時先中斷連線再重新連線,讓後續驗證使用新建立的連線。
-
比對兩個目標
造訪一個實際填入規則的目標網域,再造訪一個未列入規則的網域。請依據請求記錄中的主機名稱、匹配規則與策略確認結果,不要只看頁面能否開啟。
-
檢查相關請求
若正文能顯示,但圖片或登入失敗,請檢查失敗請求的實際網域。確認該網域屬於需要代理的資源後,再補上相應規則並重新測試。
瀏覽器可能會重複使用舊連線,單純重新整理頁面未必會建立新連線。修改規則後,請結束舊請求並重新測試;不要用仍在播放的長連線判斷新規則。example.com 是用來說明語法的保留網域,實際驗證時請換成自己需要造訪且有權使用的目標網域。
五、FINAL 已設為 DIRECT,為何結果仍不如預期?
先區分「策略不如預期」與「策略正確但請求失敗」。若匹配 PROXY 卻無法連線,可能是伺服器或目標連線問題;若匹配 DIRECT 卻無法開啟,也可能是本地網路無法直接連線至目標。增加更多網域規則,無法解決所有連線錯誤。
錯誤:The request timed out.
原因與解決方式:請求等待逾時,光看這段文字無法判斷規則是否有誤。請先檢查失敗請求使用的策略;若確實匹配預期的 PROXY,再透過既有且可用的伺服器進行比對測試,避免直接修改 FINAL。
錯誤:A server with the specified hostname could not be found.
原因與解決方式:主機名稱解析失敗。請先確認網址拼寫與請求主機名稱,再檢查目前設定中的 DNS 設定;不要將解析失敗誤認為 DOMAIN-SUFFIX 未涵蓋子網域。
以上是系統網路請求可能傳回的英文錯誤訊息,實際顯示內容會依呼叫端與系統語言而異。診斷時請保留原始訊息,並一併記錄失敗網域與實際使用的策略,不要只記下「無法開啟」。
- 所有連線都走代理:檢查 Home → Global Routing 是否仍選為 Proxy,再查看 FINAL 之前是否有範圍更廣的代理規則。
- 目標網站仍然直連:檢查是否選用了另一份 Config,或目標網域之前已有 DIRECT 規則;接著確認實際造訪的是哪個子網域。
- 頁面只顯示部分內容:頁面可能會向另一個資源網域發出請求。後綴規則只涵蓋指定網域及其子網域,不會自動包含頁面引用的所有外部資源。
- 直接輸入 IP 時結果不如預期:網域規則不能用來匹配任意 IP。只有確實需要固定位址時,才考慮另外設定 IP-CIDR,並評估位址變更與共用位址的影響。
六、指定網站分流常見問題
只寫 example.com,www 也會走代理嗎?
使用 DOMAIN-SUFFIX,example.com,PROXY 時會涵蓋 www.example.com。若使用 DOMAIN,example.com,PROXY,則只會匹配根網域;請依需求新增精確網域,或改用後綴規則。
只想代理某個網址中的單一路徑,可以這樣設定嗎?
不能將 example.com/account 寫進 DOMAIN-SUFFIX。網域分流不會依 URL 路徑區分,同一主機名稱下的不同路徑不會因此套用不同策略。請先確認需求能否依獨立子網域區分。
更新訂閱後,還需要重新設定規則嗎?
先確認更新的是 Home 中的伺服器訂閱,還是 Config 中的遠端設定。前者主要更新伺服器資料;後者可能會取代本機編輯內容。更新後請開啟目前使用的設定,確認規則並保留自己的修改備份。
FINAL,DIRECT 是不是代表中斷連線?
不是。它指定未匹配連線的處理策略,不會關閉 Home 的連線開關。保持連線並使用 Config,指定網域才能繼續依代理規則處理。
最終驗收須同時符合三項條件:目標網域匹配預期的代理策略、未列入規則的測試網域匹配 DIRECT,以及儲存並重新連線後結果一致。之後新增網站時,每次加入一組網域並重新驗證,保留清楚的修改紀錄,避免白名單逐漸變成難以說明的寬泛匹配。