可在 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。
"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 接受的最大整体文件大小为 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,然后单击测试。