

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 接聽程式規則的轉換
<a name="rule-transforms"></a>

規則轉換會在傳入請求路由至目標之前將其重寫。重寫請求不會變更評估規則條件時所做的路由決策。當用戶端傳送不同於目標預期的 URL 或主機標頭時，這很有用。

使用規則轉換會將修改路徑、查詢字串和主機標頭的責任卸載至負載平衡器。這不需要將自訂修改邏輯新增至您的應用程式程式碼，或依賴第三方代理來執行修改。

Application Load Balancer 支援接聽程式規則的下列轉換。轉換

`host-header-rewrite`  
重寫請求中的主機標頭。轉換會使用規則表達式來比對主機標頭中的模式，然後將其取代為替代字串。

`url-rewrite`  
重寫請求 URL。轉換會使用規則表達式來比對請求 URL 中的模式，然後將其取代為替代字串。

**轉換基本概念**
+ 您可以為每個規則新增一個主機標頭重寫轉換和一個 URL 重寫轉換。
+ 您無法將轉換新增至預設規則。
+ 如果沒有模式相符項目，則會將原始請求傳送至目標。
+ 如果模式相符但轉換失敗，我們會傳回 HTTP 500 錯誤。
+ 規則轉換中使用的規則表達式不支援下列功能： lookaheads、 lookbehinds、backreferences、 atomic group、haative quantifiers、subroutines、recursion 和 Unicode 字元類別 （例如 `\p{L}`)。

## 主機標頭重寫轉換
<a name="host-header-rewrite-transforms"></a>

您可以修改主機標頭中指定的網域名稱。

**Example 主機標頭轉換範例**  
您可以在建立或修改規則時指定轉換。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。以下是範例主機標頭轉換。它會將主機標頭轉換為內部端點。  

```
[
  {
      "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 重寫轉換
<a name="url-rewrite-transforms"></a>

您可以修改 URL 的路徑或查詢字串。透過在負載平衡器層級重寫 URL，即使後端服務變更，使用者和搜尋引擎的前端 URLs也可以保持一致。您也可以簡化複雜的 URL 查詢字串，讓客戶更容易輸入。

請注意，您無法修改 URL 的通訊協定或連接埠，只能修改路徑和查詢字串。

**Example 範例 URL 重寫轉換**  
您可以在建立或修改規則時指定轉換。如需詳細資訊，請參閱 [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) 和 [modify-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-rule.html) 命令。以下是 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 映射 | 