在 JSON 檔案指定重新導向規則

您可以在 JSON 檔案中指定 URL 的重新導向規則。

請使用以下格式在 JSON 檔案中指定 URL 的重新導向規則。

{
         "redirectRules":
         [
                {
                        "type": "string",
                        "comment": "this rule is applied first",
                        "expression": "/index.htm",
                        "location": "/home.html"
                },
                {
                        "type": "wildcard",
                        "expression": "/items/*?page=*",
                        "location": "/<$page$>?item=<$wildcard(1)$>",
                        "code": 302
                }
        ]
} 

JSON 檔案中的外圍內容結構是一個陣列。此陣列包含規則執行處理。

系統會先評估 "string" 規則,再評估 "wildcard" 規則。其中若有一個規則符合,後續的規則評估便會終止,然後產生相對應的重新導向。

每個規則都具有下列特性:

  • "comment" 特性:選擇性字串,對規則評估無任何影響。它包括附註或註記。

  • "expression" 特性:必要字串,主要比對內送的網站相對 URL。在萬用字元規則中,星號 (*) 記號可比對零個或多個字元。

  • "location" 特性:必要字串,指示重新導向的位置或目的地。重新導向可以是完整 URL 或相對 URL。

  • "code" 特性:選擇性整數,提供發出重新導向時所要使用的 HTTP 回應代碼。值必須是下列其中一個整數:

    • 301:代表資源永久移動。如果省略 "code" 特性,此為預設值。

    • 302:代表資源暫時移動。

  • "type" 特性:選擇性字串,指示重新導向規則類型。值必須是下列其中一個字串:

    • "string" 規則較為快速,其表示式會確實地比對整個輸入 URL。

    • "wildcard" 指定可比對一些 URL 的萬用字元規則。如果省略此特性,此為預設值。

位置記號

您可以使用位置記號來協助製作重新導向位置。以下的每個位置記號均可協助指定重新導向:

  • <$urlPath$>:相符 URL 的路徑部分。

  • <$urlQueryString$>:相符 URL 中的整個 URL 查詢字串。

  • <$urlQueryStringExcept(name1,name2)$>:相符 URL 中的整個 URL 查詢字串,但扣除具名的參數。

  • <$wildcard(N)$>:相符 URL 中以一為基礎的相符萬用字元索引。(這類似於正規表示式中的 \1..\9。)

  • <$name$>:具名查詢字串參數的值。舉例來說,如果輸入的查詢字串為 msmith: ?page=42,您可以在位置使用 <$page$>,將 '42' 放入位置中。

限制

下列限制適用於整個 redirects.json 檔案與其所含的規則:

  • Oracle Content Management 接受的整體檔案大小上限為 250 KB。

  • redirects.json 檔案中的規則數目上限為 1,000 個。

  • 規則的 "expression" 長度上限為 1,000 個字元。

  • 規則的 "location" 長度上限為 2,000 個字元。

  • 萬用字元規則表示式中的 '*' 記號數目上限為 10 個。

字串比對範例

規則:

        {
              "type": "string",
              "expression": "/old/page.jsp?id=material&type=glass",
              "location": "/new/<$id$>.htm"
        }            

下列 URL 符合規則:

/old/page.jsp?id=material&type=glass
  • 產生的位置會是:/new/material.htm

  • 整個 URL 都符合,包括查詢字串。

  • 雖然位置使用 <$id$>,但因為只有一個可能的查詢字串會相符,所以此範例並不需要。位置可寫為 /new/material.htm

下列 URL 不符合規則:

  • /old/page.jsp

    (規則表示式指定了一個必須相符的查詢字串。)

  • /old/page.jsp?id=material&type=glass&index=2

    (候選 URL 中的額外 &index=2 未完全符合規則表示式。)

  • /old/page.jsp?type=glass&id=material

    (查詢字串參數的順序必須與 “string” 規則指定的順序相同。)

萬用字元比對範例

規則:

        {
              "type": "wildcard",
              "expression": "/old/*/pages/*?id=*&item=sheet-*",
              "location": "/new/<$id$>/<$wildcard(4)$>.html"
        }            

下列 URL 符合規則:

  • /old/phones/android/pages/info.asp?id=XT1045&item=sheet-specs

    • 產生的位置會是:/new/XT1045/specs.html

    • URL 的路徑部分符合,因此也會檢查查詢字串是否符合條件。

    • 此範例中的參數與規則表示式中的參數順序相同,但這不是必要條件。

  • /old/phones/android/pages/info.asp?item=sheet-specs&id=XT1045

    • 產生的位置會是:/new/XT1045/specs.html

    • URL 的路徑部分與規則表示式中問號 (?) 之前的部分相符,因此另外檢查了參數是否相符。

    • 雖然規則表示式中參數的順序不相同,但個別參數都符合條件。

  • /old/phones/android/pages/info.asp?id=XT1045&item=sheet-specs&unrelated=thing

    • 產生的位置會是:/new/XT1045/specs.html

    • URL 的路徑部分符合,因此也會檢查查詢字串是否符合條件。

    • 候選 URL 含有一個額外的 &unrelated=thing 參數,但因為規則表示式中的具名查詢參數相符,所以此規則將視為相符。

    • unrelated 參數將會成為位置記號 <$unrelated$>,其值為 thing (但與規則是否符合無關)。

下列 URL 不符合規則:

  • /old/pages/info.jsp

    (URL 的路徑部分不符合規則表示式的路徑部分。)

  • /old/phones/android/pages/info.asp

    (URL 的路徑部分符合規則表示式的路徑部分,但規則表示式中的查詢參數不符。)

  • /old/phones/android/pages/info.asp?id=cellular

    (URL 的路徑部分符合規則表示式的路徑部分,但規則表示式中的部分查詢參數不符。)

定義權杖陣列

您也可以在 redirects.json 檔案內建立一個權杖定義陣列,以在設定支援多個虛名 URL 的重新導向時提供協助。這可讓您依據內送 URL 的特性適當地進行重新導向。

請使用以下格式在 redirects.json 檔案中定義要在重新導向規則 URL 中使用的權杖。

{
         "tokenDefinitions":
         [
                {
                        "token": "sitePrefix",
                        "type": "hostmatch",
                        "expresion": "example.com"
                        "value": ""
                },
                {
                        "token": "sitePrefix",
                        "type": "hostmatch",
                        "expresion": "*.com"
                        "value": "/site/Starter-Site"
                },
                {
                        "token": "gotoRedirect",
                        "type": "pathmatch",
                        "expresion": "*oracle*"
                        "value": "https://www.oracle.com"
                        "flags": "caseinsensitive"
                },              
        ]
}

tokenDefinitions 具有下列特性:

  • "token":要定義的權杖名稱。

  • "type":可為下列其中一項:

    • "hostmatch":比對內送 URL 的主機值。

    • "pathmatch":比對內送 URL 的路徑名稱值。

    • "querymatch":比對內送 URL 的查詢值。

  • "expression":應用於比對的表示式。支援萬用字元。

  • "value":應用於權杖的值。

  • "flags":除非 flags 值設為 caseinsensitive,否則表示式比對預設會區分大小寫

計算權杖值時,會依序列舉 tokenDefinitions 陣列,並且使用第一個符合的定義。如果沒有任何權杖定義符合該權杖,則會改用空的字串。基於方便性與效能考量,應將常用的權杖放在 tokenDefinitions 清單最前面。

tokenDefinitions 的限制條件如下:

  • 最多只能建立 250 個權杖定義。

  • token 名稱必須在 100 個字元以內。

  • expression 最多可含 10 個萬用字元。

  • expression 必須在 1000 個字元以內。

  • value 必須在 1000 個字元以內。

範例

舉例來說,您的 redirects.json 檔案可能如下:

{
         "redirectRules":
         [
                {
                        "type": "string",
                        "expression": "/legacy-privacy-policy.html",
                        "location": "<$pathPrefix$>/about/new-privacy-policy.html"
                },              
        ]
         "tokenDefinitions":
         [
                {
                        "token": "pathPrefix",
                        "type": "hostmatch",
                        "expression": "vanity.com"
                        "value": "/fashion"
                },                                              
        ]
}

在本案例中,規則的 location 特性含有 <$pathPrefix$> 權杖。pathPrefix 權杖在 tokenDefinitions 區段中定義。內送 URL 如果符合 "vanity.com",pathPrefix 值將會設為 /fashion。這將用於 location 回應中,並產生 /fashion/about/new-privacy-policy.html

假設第一個虛名網域 URL 為 http://example.com/legacy-privacy-policy.html。這符合第一個也是唯一一個重新導向規則。

此規則的已宣告 location<$pathPrefix$>/about/new-privacy-policy.html。在此情況下,必須評估 <$pathPrefix$> 權杖。若要這麼做,需要列舉 tokenDefinitions 陣列以尋找相符項目。

系統會先採用第一個權杖定義。它的 token 也為所需的權杖,因此將對其做進一步的評估。vanity.com 表示式與內送 URL 的 example.com 不符,因此此定義不符合需求,所以系統將繼續列舉。

這時已沒有其他權杖定義,所以 <$pathPrefix$> 權杖的值會使用空的字串。針對此重新導向所傳回的最終位置為 /about/new-privacy-policy.html

假設第二個虛名網域 URL 為 http://vanity.com/legacy-privacy-policy.html。與第一個 URL 一樣,此規則的已宣告 location<$pathPrefix$>/about/new-privacy-policy.html。在此情況下,必須評估 <$pathPrefix$> 權杖。若要這麼做,需要列舉 tokenDefinitions 陣列以尋找相符項目。

系統會先採用第一個權杖定義。如上述情況,它的 token 也為所需的權杖,因此會對其做進一步的評估。vanity.com 表示式符合內送 URL 的 vanity.com,因此此定義符合需求,所以使用 /fashion 值作為權杖的值。

因為找到與權杖相符的項目,所以系統停止列舉權杖定義陣列,並且計算出的最終位置為 /fashion/about/new-privacy-policy.html

測試網站重新導向

在編輯網站時,您可以開啟設定值面板並按一下重新導向,以測試網站重新導向。輸入要測試的 URL 並按一下測試

重新導向測試面板