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