Hop til hovedindhold

Case 3: Tilføj forespørgselsparametre til URL

Lad os sige, at der er et websted kaldet example.com, der som standard viser et mobillayout, men du foretrækker deres desktoplayout. Heldigvis understøtter webstedet en layout-forespørgselsparameter til at angive, hvilket layout webstedet viser. Lad os oprette en regel, der automatisk tilføjer layout=desktop.

Måske tænker du, at du kunne definere det som følger:

  • Omdiriger fra: https://example.com/.* (Regulært udtryk)
  • Omdiriger til: $0?layout=desktop

$0 refererer til destinations-URL'en. Hvis du forsøger at få adgang til example.com/hello, omdirigeres du til example.com/hello?layout=desktop. Denne funktion kaldes substitution.

tip

Substitution er også tilgængelig for Jokertegn-tilstanden, da den internt konverteres til regulært udtryk.

Der er dog et par problemer med disse indstillinger.

Problem 1: Uendelig løkke

Den nuværende indstilling skaber en uendelig omdirigeringsløkke, da https://example.com/.* også målretter https://example.com/hello?layout=desktop.

I dette tilfælde kan du angive et udelukket URL-mønster, der giver dig adgang uden omdirigering, som dette med regulært udtryk:

.*[&?]layout=[^&]*.*
  • .*: Matcher alt
  • [&?]: Matcher enten & eller ?
  • [^&]*: Matcher alt undtagen &

Problem 2: Kan ikke håndtere eksisterende parametre korrekt

Hvis destinations-URL'en allerede har andre forespørgselsparametre som example.com/hello?theme=dark, vil destinationen være example.com/hello?theme=dark?layout=desktop (Der er to ? i URL'en), men du kan kun forbinde parametrene med &. ? som et specialtegn er kun tilladt i begyndelsen af parametrene. Så det behandles ikke som en gyldig parameter.

I dette tilfælde skal du ændre indstillingerne således:

  • Omdiriger fra: (https://example.com/[^?]*)(\(?.*))?
  • Omdiriger til: $1?layout=desktop&$3

Lad os se trin for trin.

  • (https://example.com/[^?]*): Matcher den del indtil det forrige tegn af ?.
    • [^?]* matcher alt undtagen ?.
    • Dette er pakket ind i () så du kan referere til det med $1 senere.
  • (\(?.*))?: Matcher en streng, der starter med ?, hvilket betyder forespørgselsparametre.
    • Dette matcher også tom streng med ?-kvantificeringen i slutningen af mønsteret, som matcher nul eller én gang.
    • Den ydre () og den indre () kan refereres til med $2 og $3 senere.

RegExr kan hjælpe dig med at forstå detaljerne.

note

RegExr viser en fejl, når du ikke undslipper / med \. Selvom du kan undslippe det, er det ikke påkrævet, da Redirect Web bruger en anden motor fra Apple, der ikke kræver undslipning.

Dette er ikke en perfekt løsning, da den omdirigerer example.com/hello til example.com/hello?layout=desktop&, som inkluderer et unødvendigt & i slutningen af URL'en. Det er generelt ikke et stort problem, men hvis du ønsker at fjerne det, kan du bruge Behandling af fangstgrupper.

Som konklusion er dette det endelige output:

  • Omdiriger fra: (https://example.com/[^?]*)((\(?.*))?) (Regulært udtryk)
  • Omdiriger til: $1?layout=desktop$3
  • Udelukket URL-mønster: .*[&?]layout=[^&]*.* (Regulært udtryk)
  • Behandling af fangstgrupper:
    • Gruppe: $3
    • Proces: Erstat forekomster
      • Mål: \\?(.*)
      • Erstatning: &$1

⬇️ Download reglen

Dette er blot et eksempel. Du kan også oprette flere regler for at håndtere hvert problem. Det kan være meget enklere.