在 JSON 文件中指定重定向规则

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

“重定向测试”面板