本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
接聽程式規則的轉換
規則轉換會在傳入請求路由至目標之前將其重寫。重寫請求不會變更評估規則條件時所做的路由決策。當用戶端傳送不同於目標預期的 URL 或主機標頭時,這很有用。
使用規則轉換會將修改路徑、查詢字串和主機標頭的責任卸載至負載平衡器。這不需要將自訂修改邏輯新增至應用程式程式碼,也不需要依賴第三方代理來執行修改。
Application Load Balancer 支援接聽程式規則的下列轉換。
轉換
host-header-rewrite-
重寫請求中的主機標頭。轉換會使用規則表達式來比對主機標頭中的模式,然後將其取代為替代字串。
url-rewrite-
重寫請求 URL。轉換會使用規則表達式來比對請求 URL 中的模式,然後將其取代為替代字串。
轉換基本概念
-
您可以為每個規則新增一個主機標頭重寫轉換和一個 URL 重寫轉換。
-
您無法將轉換新增至預設規則。
-
如果沒有模式相符項目,則會將原始請求傳送至目標。
-
如果有模式相符但轉換失敗,我們會傳回 HTTP 500 錯誤。
主機標頭重寫轉換
您可以修改主機標頭中指定的網域名稱。
範例 主機標頭轉換範例
您可以在建立或修改規則時指定轉換。如需詳細資訊,請參閱 create-rule 和 modify-rule 命令。以下是範例主機標頭轉換。它會將主機標頭轉換為內部端點。
[ { "Type": "host-header-rewrite", "HostHeaderRewriteConfig": { "Rewrites": [ { "Regex": "^mywebsite-(.+).com$", "Replace": "internal.dev.$1.myweb.com" } ] } } ]
例如,此轉換會將主機標頭重寫https://mywebsite-example.com/project-a為 https://internal.dev.example.myweb.com/project-a。
URL 重寫轉換
您可以修改 URL 的路徑或查詢字串。透過在負載平衡器層級重寫 URL,即使後端服務變更,使用者和搜尋引擎的前端 URLs也可以保持一致。您也可以簡化複雜的 URL 查詢字串,讓客戶更容易輸入。
請注意,您無法修改 URL 的通訊協定或連接埠,只能修改路徑和查詢字串。
範例 URL 重寫轉換
您可以在建立或修改規則時指定轉換。如需詳細資訊,請參閱 create-rule 和 modify-rule 命令。以下是 URL 重寫轉換的範例。它會將目錄結構轉換為查詢字串。
[ { "Type": "url-rewrite", "UrlRewriteConfig": { "Rewrites": [ { "Regex": "^/dp/([A-Za-z0-9]+)/?$", "Replace": "/product.php?id=$1" } ] } } ]
例如,此轉換會將請求 URL 重寫https://www.example.com/dp/B09G3HRMW為 https://www.example.com/product.php?id=B09G3HRMW。
URL 重寫與 URL 重新導向的差異
| 特性 | URL 重新導向 | URL 重寫 |
|---|---|---|
| URL 顯示 | 瀏覽器地址列中的變更 | 瀏覽器地址列沒有變更 |
| 狀態碼 | 使用 301 (永久) 或 302 (暫時) | 沒有狀態碼變更 |
| 處理 | 瀏覽器端 | 伺服器端 |
| 常見用途 | 網域變更、網站合併、修正中斷的連結 | 清除 SEO URLs、隱藏複雜的結構、提供舊版 URL 映射 |