Specificarea regulilor de redirecţionare într-un fişier JSON

Puteţi specifica reguli de redirecţionare pentru URL-uri într-un fişier JSON.

Utilizaţi următorul format într-un fişier JSON pentru a specifica reguli de redirecţionare pentru URL-uri.

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

Structura exterioară care conţine elemente din fişierul JSON este o matrice. Matricea conţine instanţele regulii.

Regulile "string" (şir) vor fi evaluate mai întâi, fiind urmate, în ordine, de regulile "wildcard" (caracter de înlocuire). După ce una dintre reguli corespunde, evaluarea regulilor următoare este abandonată şi este generată redirecţionarea corespunzătoare.

Fiecare regulă are următoarele proprietăţi:

  • Proprietatea "comment" (comentariu) este un şir opţional care nu are impact asupra evaluării regulilor. Acesta include note sau comentarii.

  • Proprietatea "expression" (expresie) este un şir obligatoriu care corespunde cu adresa URL relativă a site-ului pe care se intră. Într-o regulă bazată pe caractere de înlocuire, tokenul asterisc (*) corespunde cu zero sau mai multe caractere.

  • Proprietatea"location" (locaţie) este un şir obligatoriu care indică locaţia sau destinaţia redirecţionării. Redirecţionarea poate fi un URL complet sau relativ.

  • Proprietatea "code" (cod) este un număr întreg opţional care furnizează codul de răspuns HTTP care trebuie utilizat atunci când este emisă redirecţionarea. Valoarea trebuie să fie unul dintre următoarele numere întregi:

    • 301: Arată că resursa a fost mutată definitiv. Aceasta este valoarea prestabilită dacă proprietatea "code" (cod) este omisă.

    • 302: Arată că resursa a fost mutată temporar.

  • Proprietatea "type” (tip) este un şir opţional care indică tipul de regulă de redirecţionare. Valoarea trebuie să fie unul dintre următoarele şiruri:

    • "string" (şir) specifică o regulă mai rapidă a cărei expresie corespunde exact întregului URL de intrare.

    • "wildcard" (caracter de înlocuire) specifică o regulă de caracter de înlocuire care poate corespunde mai multor URL-uri. Aceasta este valoarea prestabilită dacă proprietatea este omisă.

Tokenurile de locaţii

Puteţi utiliza tokenuri de locaţii pentru a ajuta la crearea unei locaţii de redirecţionare. Fiecare dintre următoarele tokenuri de locaţii poate ajuta la specificarea unei redirecţionări:

  • <$urlPath$>: Porţiunea de cale a URL-ului asociat.

  • <$urlQueryString$>: Întregul şir de interogare URL din URL-ul asociat.

  • <$urlQueryStringExcept(name1,name2)$>: Întregul şir de interogare URL din URL-ul asociat, minus parametrii numiţi.

  • <$wildcard(N)$>: Indexul bazat pe unu al caracterului de înlocuire care corespunde din URL-ul asociat. (Acesta este similar cu \1..\9 din expresiile obişnuite.)

  • <$name$> (nume): Valoarea parametrului şir de interogare numit. De exemplu, dacă aveţi şirul de interogare msmith: ?page=42 la intrare, puteţi utiliza <$page$> (pagină) în locaţie pentru a introduce '42' în locaţie.

Restricţiile

Următoarele restricţii se aplică fişierului redirects.json în ansamblu şi regulilor pe care acesta le conţine:

  • Dimensiunea maximă a fişierului acceptată de Oracle Content Management este 250 KB.

  • Numărul maxim de reguli în fişierul redirects.json este 1000.

  • Lungimea maximă pentru "expression" (expresie) pentru o regulă este de 1000 de caractere.

  • Lungimea maximă pentru "location" (locaţie) este de 2000 de caractere.

  • Numărul maxim de tokenuri '*' dintr-o expresie cu o regulă de caracter de înlocuire este 10.

Exemplu de corespondenţă de şiruri

Regulă:

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

Următorul URL ar corespunde regulii:

/old/page.jsp?id=material&type=glass
  • Locaţia rezultată ar fi: /new/material.htm

  • Corespunde întregul URL, inclusiv şirul de interogare.

  • Deşi <$id$> este utilizat în locaţie, acesta nu este necesar pentru acest exemplu, deoarece numai un sigur şir de interogare ar putea corespunde. Locaţia ar fi putut fi scrisă astfel: /new/material.htm.

Următoarele URL-uri nu ar corespunde regulii:

  • /old/page.jsp

    (Expresia regulii dă un şir de interogare care trebuie să corespundă.)

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

    (Porţiunea suplimentară &index=2 din URL-ul candidat nu corespunde exact cu expresia regulii.)

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

    (Ordonarea parametrilor şirului de interogare trebuie să corespundă într-o regulă „şir”.)

Exemplu de corespondenţă de caracter de înlocuire

Regulă:

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

Următoarele URL-uri ar corespunde regulii:

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

    • Locaţia rezultată ar fi: /new/XT1045/specs.html

    • Porţiunea de cale a URL-ului corespunde, deci şirul de interogare este, de asemenea, examinat pentru identificarea de condiţii care corespund.

    • Întâmplător, parametrii din acest exemplu corespund ordonării parametrilor din expresia regulii, dar acest lucru nu este obligatoriu.

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

    • Locaţia rezultată ar fi: /new/XT1045/specs.html

    • Porţiunea de cale a URL-ului corespunde expresiei regulii de dinainte de semnul întrebării (?) şi deci parametrii sunt de asemenea verificaţi pentru a se identifica o corespondenţă.

    • Deşi parametrii sunt listaţi într-o ordine diferită în expresia regulii, corespondenţa acestora este stabilită individual.

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

    • Locaţia rezultată ar fi: /new/XT1045/specs.html

    • Porţiunea de cale a URL-ului corespunde, deci şirul de interogare este, de asemenea, examinat pentru identificarea de condiţii care corespund.

    • URL-ul candidat are un parametru suplimentar &unrelated=thing, însă, deoarece parametrii de interogare numiţi din expresia regulii corespund, se consideră că regula corespunde.

    • Parametrul necorelat ar fi disponibil în locaţie ca token, respectiv ca <$unrelated$> (necorelat), şi ar avea valoarea thing (lucru), deşi nu a contribuit la corespondenţa regulii.

Următoarele URL-uri nu ar corespunde:

  • /old/pages/info.jsp

    (Porţiunea de cale a URL-ului nu corespunde porţiunii de cale a expresiei regulii.)

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

    (Porţiunea de cale a URL-ului corespunde porţiunii de cale a expresiei regulii, dar parametrii de interogare din expresia regulii nu corespund.)

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

    (Porţiunea de cale a URL-ului corespunde porţiunii de cale a expresiei regulii, dar nu toţi parametrii de interogare din expresia regulii corespund.)

Definirea unei matrice de tokenuri

De asemenea, puteţi crea o serie de definiţii pentru tokenuri în cadrul fişierului redirects.json, pentru a vă asista la configurarea redirecţionărilor care acceptă mai multe adrese URL ostentative. Acest lucru vă permite să faceţi în mod adecvat redirecţionarea, în funcţie de caracteristicile adresei URL primite.

Utilizaţi următorul format în fişierul redirects.json, pentru a defini tokenurile de utilizat în adresele URL cu reguli de redirecţionare.

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

Matricea tokenDefinitions are următoarele proprietăţi:

  • "token": Numele tokenului care va fi definit.

  • "type":Unul dintre următoarele tipuri:

    • "hostmatch" pentru a face asocierea cu valoarea gazdei din adresa URL primită.

    • "pathmatch" pentru a face asocierea cu valoarea numelui de cale din adresa URL primită.

    • "querymatch" pentru a face asocierea cu valoarea interogării din adresa URL primită.

  • "expression": Expresia care trebuie utilizată pentru asociere. Sunt acceptate caracterele de înlocuire.

  • "value": Valoarea care trebuie utilizată pentru token.

  • "flags":În mod prestabilit, asocierea în cadrul expresiei face distincţia între litere mari şi mici, cu excepţia cazului în care valoarea flags este setată la caseinsensitive

Atunci când se face calcularea valorii unui token, matricea tokenDefinitions va fi enumerată în ordine. Va fi utilizată prima definiţie de asociere. Dacă nicio definiţie de token nu satisface tokenul respectiv, atunci se va folosi în schimb un şir vid. Din motive de comoditate şi de performanţă, tokenurile utilizate în mod obişnuit ar trebui să fie plasate în partea de sus a listei tokenDefinitions.

Matricea tokenDefinitions are următoarele restricţii:

  • Puteţi crea până la 250 de definiţii de tokenuri.

  • Numele tokenului trebuie să aibă mai puţin de 100 de caractere.

  • Parametrul expression poate avea până la 10 caractere de înlocuire.

  • Parametrul expression trebuie să aibă mai puţin de 1000 de caractere.

  • Parametrul value trebuie să aibă mai puţin de 1000 de caractere.

Exemplu

De exemplu, este posibil să aveţi următorul fişier 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"
                },                                              
        ]
}

În acest caz, proprietatea location a regulii are un token <$pathPrefix$>. Tokenul pathPrefix este definit în secţiunea tokenDefinitions. Dacă adresa URL primită are corespondenţă în "vanity.com", atunci valoarea pathPrefix va fi setată la /fashion. Acest lucru va fi utilizat în răspunsul pentru location, având ca rezultat /fashion/about/new-privacy-policy.html.

Să presupunem că prima adresă URL a domeniului global Vanity este http://example.com/legacy-privacy-policy.html. Aceasta ar corespunde primei şi singurei reguli de redirecţionare.

Parametrul location declarat pentru această regulă este <$pathPrefix$>/about/new-privacy-policy.html. În această situaţie, tokenul <$pathPrefix$> trebuie să fie evaluat. Pentru a face acest lucru, matricea tokenDefinitions este enumerată pentru a găsi o corespondenţă.

Este luată în considerare prima definiţie a tokenului. Acest token este cel dorit, astfel că este evaluat în continuare. Expresia vanity.com nu corespunde cu example.com al adresei URL primite, astfel că această definiţie nu satisface cerinţele şi enumerarea continuă.

În acest stadiu nu mai există definiţii pentru token, astfel că este utilizat un şir vid pentru valoarea tokenului <$pathPrefix$>. Locaţia finală returnată pentru această redirecţionare este /about/new-privacy-policy.html.

Să presupunem că a doua adresă URL a domeniului global Vanity este http://vanity.com/legacy-privacy-policy.html. Ca şi la prima adresă URL, valoarea location declarată pentru această regulă este <$pathPrefix$>/about/new-privacy-policy.html. În această situaţie, tokenul <$pathPrefix$> trebuie să fie evaluat. Pentru a face acest lucru, matricea tokenDefinitions este enumerată pentru a găsi o corespondenţă.

Este luată în considerare prima definiţie a tokenului. Ca şi mai înainte, acest token este cel dorit, astfel că este evaluat în continuare. Expresia vanity.com nu corespunde cu vanity.com al adresei URL primite, astfel că această definiţie nu satisface cerinţele şi valoarea /fashion este utilizată ca valoare a tokenului.

Deoarece a fost găsită o corespondenţă pentru token, enumerarea în matricea definiţiilor tokenului se opreşte, iar locaţia finală este calculată ca /fashion/about/new-privacy-policy.html.

Testarea redirecţionărilor pentru site-uri

Puteţi testa redirecţionările site-ului atunci când editaţi un site prin deschiderea panoului Setări şi făcând clic pe Redirecţionări. Introduceţi o adresă URL de testat şi faceţi clic pe Testare.

Panou de testare redirecţionări