Especificar Regras de Redirecionamento num Ficheiro JSON

Pode especificar regras de redirecionamento para os URLs num ficheiro JSON.

Utilize o formato seguinte num ficheiro JSON para especificar as regras de redirecionamento para os URLs.

{
         "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
                }
        ]
} 

A estrutura contentora externa no ficheiro JSON é uma matriz. A matriz contém instâncias de regras.

As regras "string" serão avaliadas primeiro, seguidas das regras "wildcard", por ordem. Assim que uma das regras corresponder, a avaliação das regras subsequentes é abandonada e o redirecionamento correspondente é gerado.

Cada regra tem as seguintes propriedades:

  • A propriedade "comment" é uma cadeia de caracteres opcional que não tem nenhum impacto na avaliação das regras. Inclui notas ou comentários.

  • A propriedade "expression" é uma cadeia de caracteres obrigatória que efetua correspondência com o URL relativo ao site de entrada. Numa regra de caracteres de substituição, o token asterisco (*) corresponde a zero ou mais caracteres.

  • A propriedade "location" é uma cadeia de caracteres obrigatória que indica a localização ou o destino do redirecionamento. O redirecionamento pode ser um URL completo ou relativo.

  • A propriedade "code" é um número inteiro opcional que fornece o código de resposta de HTTP a utilizar ao emitir o redirecionamento. O valor deve ser um dos seguintes números inteiros:

    • 301: Indica que o recurso foi deslocado permanentemente. Este é o valor por omissão se a propriedade "code" for omitida.

    • 302: Indica que o recurso foi deslocado temporariamente.

  • A propriedade "type" é uma cadeia de caracteres opcional que indica o tipo de regra de redirecionamento. O valor deve ser uma das seguintes cadeias de caracteres:

    • "string" especifica uma regra mais rápida cuja expressão corresponde de forma exata à totalidade do URL de entrada de dados.

    • "wildcard" especifica uma regra de caracteres de substituição que pode corresponder a diversos URLs. Este é o valor por omissão se a propriedade for omitida.

Tokens da Localização

Pode utilizar tokens da localização para ajudar a produzir uma localização de redirecionamento. Cada um dos seguintes tokens da localização pode ajudar a especificar um redirecionamento:

  • <$urlPath$>: A parte do percurso do URL correspondente.

  • <$urlQueryString$>: A cadeia de caracteres de consulta do URL total do URL correspondente.

  • <$urlQueryStringExcept(name1,name2)$>: A cadeia de caracteres de consulta do URL total do URL correspondente menos os parâmetros nomeados.

  • <$wildcard(N)$>: O índice baseado em um do carácter de substituição correspondente no URL correspondente. (Isto é análogo a \1..\9 em expressões regulares.)

  • <$name$>: O valor do parâmetro da cadeia de caracteres de consulta nomeado. Por exemplo, se tiver a cadeia de caracteres de consulta msmith: ?page=42 na entrada de dados, pode utilizar <$page$> na localização para colocar '42' na localização.

Restrições

As seguintes restrições aplicam-se ao ficheiro redirects.json como um todo e às regras nele contidas:

  • O tamanho máximo global do ficheiro aceite pelo Oracle Content Management é 250 KB.

  • O número máximo de regras no ficheiro redirects.json é 1000.

  • O comprimento máximo de "expression" para uma regra é 1000 caracteres.

  • O comprimento máximo de "location" para uma regra é 2000 caracteres.

  • O número máximo de tokens '*' numa expressão de regra de caracteres de substituição é 10.

Exemplo de Correspondência da Cadeia de Caracteres

Regra:

        {
              "type": "string",
              "expression": "/old/page.jsp?id=material&type=glass",
              "location": "/new/<$id$>.htm"
        }            

O URL seguinte corresponderá à regra:

/old/page.jsp?id=material&type=glass
  • A localização resultante será: /new/material.htm

  • O URL corresponde na totalidade, incluindo a cadeia de caracteres de consulta.

  • Embora <$id$> seja utilizado na localização, não é necessário para este exemplo porque apenas uma cadeia de caracteres de consulta poderá corresponder. A localização poderá ser escrita como /new/material.htm.

Os URLs seguintes não corresponderão à regra:

  • /old/page.jsp

    (A expressão da regra fornece uma cadeia de caracteres de consulta que deve corresponder.)

  • /old/page.jsp?id=material&type=glass&index=2

    (O &index=2 extra no URL candidato não corresponde de forma exata à expressão da regra.)

  • /old/page.jsp?type=glass&id=material

    (A ordenação dos parâmetros da cadeia de caracteres de consulta deve corresponder à regra "string".)

Exemplo de Correspondência de Caracteres de Substituição

Regra:

        {
              "type": "wildcard",
              "expression": "/old/*/pages/*?id=*&item=sheet-*",
              "location": "/new/<$id$>/<$wildcard(4)$>.html"
        }            

Os URLs seguintes corresponderão à regra:

  • /old/phones/android/pages/info.asp?id=XT1045&item=sheet-specs

    • A localização resultante será: /new/XT1045/specs.html

    • A parte do percurso do URL corresponde e, por isso, a cadeia de caracteres de consulta também é examinada relativamente às condições de correspondência.

    • Os parâmetros neste exemplo por acaso correspondem à ordenação dos parâmetros na expressão da regra, mas isto não é obrigatório.

  • /old/phones/android/pages/info.asp?item=sheet-specs&id=XT1045

    • A localização resultante será: /new/XT1045/specs.html

    • A parte do percurso do URL corresponde à expressão da regra antes do ponto de interrogação (?) e, por isso, os parâmetros também são verificados à procura de uma correspondência.

    • Embora os parâmetros estejam listados por uma ordem diferente na expressão da regra, a correspondência dos parâmetros é efetuada individualmente.

  • /old/phones/android/pages/info.asp?id=XT1045&item=sheet-specs&unrelated=thing

    • A localização resultante será: /new/XT1045/specs.html

    • A parte do percurso do URL corresponde e, por isso, a cadeia de caracteres de consulta também é examinada relativamente às condições de correspondência.

    • O URL candidato tem um parâmetro &unrelated=thing extra, mas como os parâmetros da consulta nomeados na expressão da regra correspondem, considera-se que a regra corresponde.

    • O parâmetro unrelated estará disponível na localização como um token, como <$unrelated$>, e terá o valor thing, apesar de não ter contribuído para a correspondência da regra.

Os URLs seguintes não corresponderão:

  • /old/pages/info.jsp

    (A parte do percurso do URL não corresponde à parte do percurso da expressão da regra.)

  • /old/phones/android/pages/info.asp

    (A parte do percurso do URL corresponde à parte do percurso da expressão da regra, mas os parâmetros da consulta na expressão da regra não correspondem.)

  • /old/phones/android/pages/info.asp?id=cellular

    (A parte do percurso do URL corresponde à parte do percurso da expressão da regra, mas nem todos os parâmetros da consulta na expressão da regra correspondem.)

Definir uma Matriz de Tokens

Pode também criar uma matriz de definições de tokens no âmbito do ficheiro redirects.json para auxiliar na configuração de redirecionamentos que suportam vários URLs personalizados. Isto permite efetuar o redirecionamento de forma adequada com base nas características do URL de entrada.

Utilize o formato seguinte no ficheiro redirects.json para definir os tokens a utilizar nas regras de redirecionamento para os URLs.

{
         "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"
                },              
        ]
}

A lista tokenDefinitions tem as seguintes propriedades:

  • "token": O nome do token a definir.

  • "type": Um dos seguintes:

    • "hostmatch" para corresponder ao valor do host do URL de entrada.

    • "pathmatch" para corresponder ao valor do nome do percurso do URL de entrada.

    • "querymatch" para corresponder ao valor da consulta do URL de entrada.

  • "expression": A expressão que deve ser utilizada para efetuar correspondência. São suportados caracteres de substituição.

  • "value": O valor que deve ser utilizado para o token.

  • "flags": Por omissão, a correspondência da expressão é sensível a maiúsculas e minúsculas, a menos que o valor flags esteja definido como caseinsensitive

Quando computar o valor de um token, a matriz tokenDefinitions será enumerada por ordem. A primeira definição com correspondência será utilizada. Se nenhuma definição de token cumprir os requisitos do token, será utilizada uma cadeia de caracteres vazia em vez disso. Para efeitos de conveniência e desempenho, os tokens geralmente utilizados devem ser colocados na parte superior da lista tokenDefinitions.

A lista tokenDefinitions tem as seguintes restrições:

  • Pode criar até 250 definições de tokens.

  • O nome do token deve ter menos de 100 caracteres.

  • O valor da propriedade expression pode ter até 10 caracteres de substituição.

  • O valor da propriedade expression deve ter menos de 1000 caracteres.

  • O valor da propriedade value deve ter menos de 1000 caracteres.

Exemplo

Por exemplo, pode ter o seguinte ficheiro 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"
                },                                              
        ]
}

Neste caso a propriedade location da regra tem um token <$pathPrefix$>. O token pathPrefix está definido na secção tokenDefinitions. Se o URL de entrada corresponder a "vanity.com", o valor de pathPrefix será definido como /fashion. Isto será utilizado na resposta de location, resultando em /fashion/about/new-privacy-policy.html.

Vamos partir do princípio que o primeiro URL do domínio personalizado é http://exemplo.com/legacy-privacy-policy.html. Isto iria corresponder à primeira e única regra de redirecionamento.

A propriedade location declarada para esta regra é <$pathPrefix$>/about/new-privacy-policy.html. Nesta situação, o token <$pathPrefix$> necessita de ser avaliado. Para tal, a matriz tokenDefinitions é enumerada para encontrar uma correspondência.

A primeira definição do token será considerada. O respetivo token é o pretendido, por isso continua a ser avaliado. A expressão vanity.com não corresponde à expressão exemplo.com dos URLs de entrada, por isso esta definição não cumpre os requisitos e a enumeração continua.

Neste momento, não existem mais definições de tokens, por isso a cadeia de caracteres vazia é utilizada para o valor do token <$pathPrefix$>. A localização final devolvida para este redirecionamento é /about/new-privacy-policy.html.

Vamos partir do princípio que o segundo URL do domínio personalizado é http://vanity.com/legacy-privacy-policy.html. Tal como no primeiro URL, a propriedade location declarada para esta regra é <$pathPrefix$>/about/new-privacy-policy.html. Nesta situação, o token <$pathPrefix$> necessita de ser avaliado. Para tal, a matriz tokenDefinitions é enumerada para encontrar uma correspondência.

A primeira definição do token será considerada. Como anteriormente, o respetivo token é o pretendido, por isso continua a ser avaliado. A expressão vanity.com não corresponde à expressão vanity.com dos URLs de entrada, por isso esta definição não cumpre os requisitos e o valor /fashion é utilizado como valor do token.

Uma vez que foi encontrada uma correspondência para o token, a enumeração da matriz de definições dos tokens é interrompida e a localização final é computada como /fashion/about/new-privacy-policy.html.

Testar Redirecionamentos de Site

Pode testar os redirecionamentos de site quando editar um site abrindo o painel Definições e clicando em Redirecionamentos. Introduza um URL para testar e clique em Testar.

Painel de Teste de Redirecionamentos