可在 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,然后单击测试。
