您可以在 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 並按一下測試。
