JSONファイル内のURLのリダイレクト・ルールを指定できます。
URLのリダイレクト・ルールを指定するには、JSONファイルで次のフォーマットを使用します。
{ "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"
ルールが順番に評価されます。ルールの1つが一致すると、後続のルールの評価は放棄され、対応するリダイレクトが生成されます。
各ルールには次のプロパティがあります:
The "comment"
プロパティは、ルールの評価に影響を与えないオプションのストリングです。注釈や解説が含まれています。
"expression"
プロパティは、受信サイトの相対URLと一致する必須文字列です。ワイルドカード・ルールでは、アスタリスク(*
)トークンは0個以上の文字と一致します。
"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から始まる索引。(これは正規表現の\1..\9
に似ています。)
<$name$>
: 名前付き問合せ文字列パラメータの値。たとえば、入力に問合せ文字列msmith: ?page=42
がある場合、<$page$>
を使用してその場所に'42'
を配置できます。
制限
redirects.json
ファイル全体およびそれに含まれるルールには、次の制限が適用されます:
Oracle Content Managementで受け入れられるファイル全体の最大サイズは250KBです。
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$>
がその場所で使用されていますが、使用可能な問合せ文字列が1つしか一致できないため、この例では必要ありません。場所は/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
(問合せ文字列パラメータの順序は、「文字列」ルールで一致する必要があります。)
ワイルドカード一致の例:
ルール:
{ "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"
: 次のいずれか。
受信URLのホスト値を照合する"hostmatch"
。
受信URLのパス名値を照合する"pathmatch"
。
受信URLの問合せ値を照合する"querymatch"
。
"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
です。
2番目のバニティ・ドメイン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を入力し、「テスト」をクリックします。