Stanovení pravidel pro přesměrování v souboru JSON

V souboru JSON můžete určit pravidla pro přesměrování adres URL.

Pomocí následujícího formátu v souboru JSON definujte pravidla pro přesměrování adres 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
                }
        ]
} 

Vnější struktura s obsahem v souboru JSON je pole. Pole obsahuje instance pravidel.

Pravidla typu "string" budou vyhodnocena jako první, poté budou vyhodnocena pravidla typu "wildcard". Jakmile je pro jedno z pravidel zjištěna shoda, vyhodnocování následujících pravidel se přeruší a bude generováno odpovídající přesměrování.

Každé pravidlo má následující vlastnosti:

  • Vlastnost "comment" je nepovinný řetězec, který nemá žádný vliv na vyhodnocení pravidel. Obsahuje poznámky nebo komentáře.

  • Vlastnost "expression" je povinný řetězec, který je porovnáván s příchozí ověřovanou relativní (vůči webu) adresou URL. V pravidle se zástupnými znaky odpovídá lexikální jednotka * (hvězdička) nulovému nebo vyššímu počtu znaků.

  • Vlastnost "location" je povinný řetězec, který udává umístění nebo cíl přesměrování. K přesměrování může být použita úplná nebo relativní adresa URL.

  • Vlastnost "code" je nepovinné celé číslo, které poskytuje kód odpovědi protokolu HTTP. Tento kód se použije v případě výskytu problémů s přesměrováním. Hodnota musí být jedno z následujících celých čísel:

    • 301: Udává, že je zdroj trvale přesunut. Jedná se o výchozí hodnotu, pokud je vlastnost "code" vynechána.

    • 302: Udává, že je zdroj dočasně přesunut.

  • Vlastnost "type" je nepovinný řetězec, který udává typ pravidla přesměrování. Hodnota musí být jeden z následujících řetězců:

    • "string" určuje rychlejší pravidlo, pro které musí výraz přesně odpovídat celé vstupní adrese URL.

    • "wildcard" určuje pravidlo se zástupnými znaky, kterému může vyhovovat více adres URL. Jedná se o výchozí hodnotu, pokud je vlastnost vynechána.

Lexikální jednotky umístění

Lexikální jednotky umístění usnadňují vytváření umístění pro přesměrování. Každá z následujících lexikálních jednotek umístění může usnadnit specifikaci přesměrování:

  • <$urlPath$>: Představuje část cesty odpovídající adresy URL.

  • <$urlQueryString$>: Představuje celý řetězec dotazu na adresu URL z odpovídající adresy URL.

  • <$urlQueryStringExcept(název_1,název_2)$>: Představuje celý řetězec dotazu na adresu URL z odpovídající adresy URL bez vyjmenovaných parametrů.

  • <$wildcard(N)$>: Představuje index číslovaný od jedné odpovídajícího zástupného znaku v odpovídající adrese URL. (Jedná se o analogii k \1..\9 v regulárních výrazech.)

  • <$name$>: Představuje hodnotu jmenovaného parametru řetězce dotazu. Pokud máte například na vstupu řetězec dotazu msmith: ?page=42, pak můžete použít lexikální jednotku <$page$> v umístění pro vložení '42' do umístění.

Omezení

Následující omezení se vztahují na soubor redirects.json jako celek a na pravidla, která obsahuje:

  • Maximální celková velikost souboru přijatelná pro službu Oracle Content Management je 250 kB.

  • Maximální počet pravidel v souboru redirects.json je 1000.

  • Maximální délka vlastnosti "expression" pro pravidlo je 1000 znaků.

  • Maximální délka vlastnosti "location" pro pravidlo je 2000 znaků.

  • Maximální počet lexikálních jednotek '*' ve výrazu pravidla se zástupnými znaky je 10.

Příklad porovnání řetězců

Pravidlo:

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

Pravidlu odpovídá následující adresa URL:

/old/page.jsp?id=material&type=glass
  • Výsledné umístění bude: /new/material.htm

  • Celá adresa URL se shoduje, včetně řetězce dotazu.

  • Ačkoli je v umístění použito <$id$>, není to pro tento příklad nezbytné, protože se může shodovat jen jeden možný řetězec dotazu. Umístění by mohlo být zapsáno jako /new/material.htm.

Pravidlu neodpovídají následující adresy URL:

  • /old/page.jsp

    (Výraz pravidla poskytuje řetězec dotazu, pro který musí být dosaženo shody.)

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

    (Dodatečný text &index=2 v ověřované adrese URL neodpovídá přesně výrazu pravidla.)

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

    (Pořadí parametrů řetězce dotazu musí odpovídat pravidlu typu "string".)

Příklad porovnání s využitím zástupných znaků

Pravidlo:

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

Pravidlu odpovídají následující adresy URL:

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

    • Výsledné umístění bude: /new/XT1045/specs.html

    • Část cesty adresy URL se shoduje, takže řetězec dotazu je také zkoumán na shodu podmínek.

    • Parametry uvedené v tomto příkladu se shodují, pokud jde o pořadí, s parametry ve výrazu pravidla, ale není to nutné.

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

    • Výsledné umístění bude: /new/XT1045/specs.html

    • Část cesty adresy URL odpovídá výrazu pravidla před znakem otazník (?), takže je také kontrolována shoda u parametrů.

    • Ačkoli jsou parametry ve výrazu pravidla uvedeny v jiném pořadí, jsou porovnávány jednotlivě.

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

    • Výsledné umístění bude: /new/XT1045/specs.html

    • Část cesty adresy URL se shoduje, takže řetězec dotazu je také zkoumán na shodu podmínek.

    • Ověřovaná adresa URL obsahuje navíc parametr &unrelated=thing, ale protože se vyjmenované parametry dotazu ve výrazu pravidla shodují, je pravidlo považováno za shodné.

    • Parametr unrelated bude dostupný v umístění jako lexikální jednotka <$unrelated$> a bude mít hodnotu thing, i když nepřispěl ke shodě s pravidlem.

Následující adresy URL pravidlu neodpovídají:

  • /old/pages/info.jsp

    (Část cesty adresy URL neodpovídá části cesty ve výrazu pravidla.)

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

    (Část cesty adresy URL odpovídá části cesty ve výrazu pravidla, ale parametry dotazu ve výrazu pravidla se neshodují.)

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

    (Část cesty adresy URL odpovídá části cesty ve výrazu pravidla, ale ne všechny parametry dotazu ve výrazu pravidla se shodují.)

Definice pole lexikální jednotky

Můžete také vytvořit pole definicí lexikálních jednotek v souboru redirects.json, které vám pomůže konfigurovat přesměrování podporující více zkrácených adres URL. To vám umožňuje správně přesměrovat na základě charakteristik příchozí adresy URL.

V souboru redirects.json použijte následující formát k definování lexikálních jednotek, které budou používány v pravidlech přesměrování adres 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"
                },              
        ]
}

Část tokenDefinitions má následující vlastnosti:

  • "token": Název definované lexikální jednotky.

  • "type": Jedna z těchto hodnot:

    • "hostmatch" k porovnání s hodnotou hostitelského počítače v příchozí adrese URL.

    • "pathmatch" k porovnání s hodnotou cesty v příchozí adrese URL.

    • "querymatch" k porovnání s hodnotou dotazu v příchozí adrese URL.

  • "expression": Výraz, který bude použit k porovnání. Jsou podporovány zástupné znaky.

  • "value": Hodnota použitá pro lexikální jednotku.

  • "flags": Ve výchozím nastavení je výraz porovnáván s rozlišováním velikosti písmen, pokud není hodnota flags nastavena na caseinsensitive

Při výpočtu hodnoty lexikální jednotky bude pole tokenDefinitions postupně enumerováno. Použita bude první vyhovující definice. Jestliže lexikální jednotce nevyhoví žádná její definice, bude použit prázdný řetězec. Z hlediska výhodnosti a výkonu je vhodné umístit běžně používané lexikální jednotky na začátek seznamu tokenDefinitions.

Seznam tokenDefinitions má následující omezení:

  • Můžete vytvořit až 250 definic lexikální jednotky.

  • Název token musí mít méně než 100 znaků.

  • Část expression může obsahovat až 10 zástupných znaků.

  • Část expression musí mít méně než 1 000 znaků.

  • Část value musí mít méně než 1 000 znaků.

Příklad

Soubor redirects.json může vypadat třeba takto:

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

V tomto případě vlastnost location pravidla má lexikální jednotku <$pathPrefix$>. Lexikální jednotka pathPrefix je definována v části tokenDefinitions. Pokud příchozí adresa URL odpovídá zkrácené adrese, bude hodnota pathPrefix nastavena na /fashion. Ta bude použita v odpovědi location a výsledkem bude adresa /fashion/about/new-privacy-policy.html.

Předpokládejme, že první zkrácená adresa URL je http://example.com/legacy-privacy-policy.html. Ta bude odpovídat pouze prvnímu pravidlu přesměrování.

Deklarované location pro toto pravidlo je <$pathPrefix$>/about/new-privacy-policy.html. V této situaci je nutné vyhodnotit lexikální jednotku <$pathPrefix$>. Za tím účelem je nutné projít pole tokenDefinitions a najít shodu.

Zkontrolována je první definice lexikální jednotky. Její token má požadovanou hodnotu, proto je dále vyhodnocen. Výraz vanity.com neodpovídá části example.com příchozí adresy URL, proto tato definice nesplňuje požadavky a enumerace pokračuje.

V tomto bodě již žádné další definice lexikální jednotky nejsou, proto je jako hodnota lexikální jednotky <$pathPrefix$> použit prázdný řetězec. Konečné umístění vrácené pro toto přesměrování je /about/new-privacy-policy.html.

Předpokládejme, že druhá zkrácená adresa URL je http://vanity.com/legacy-privacy-policy.html. Stejně jako u první adresy URL má deklarované location pro toto pravidlo hodnotu <$pathPrefix$>/about/new-privacy-policy.html. V této situaci je nutné vyhodnotit lexikální jednotku <$pathPrefix$>. Za tím účelem je nutné projít pole tokenDefinitions a najít shodu.

Zkontrolována je první definice lexikální jednotky. A stejně jako předtím má její token požadovanou hodnotu, proto je dále vyhodnocen. Výraz vanity.com odpovídá části vanity.com příchozí adresy URL, proto tato definice splňuje požadavky a hodnota /fashion je použita jako hodnota lexikální jednotky.

Protože byla nalezena shoda pro lexikální jednotku, enumerace pole s jejími definicemi se zastaví a konečné umístění je vypočítáno jako /fashion/about/new-privacy-policy.html.

Testování přesměrování webů

Přesměrování webů můžete při úpravách webu testovat otevřením panelu Nastavení a kliknutím na tlačítko Přesměrování. Zapište testovanou adresu URL a klikněte na tlačítko Test.

Testovací panel přesměrování