3. eset: Lekérdezési paraméterek hozzáadása az URL-hez
Tegyük fel, hogy van egy example.com nevű webhely, amely alapértelmezés szerint mobil elrendezést mutat, de Ön a desktop elrendezést részesíti előnyben. Szerencsére a webhely támogatja a layout lekérdezési paramétert, amellyel megadhatja, hogy a webhely milyen elrendezést jelenítsen meg. Hozzunk létre egy szabályt, amely automatikusan hozzáadja a layout=desktop paramétert.
Talán úgy gondolja, hogy a következőképpen definiálhatja:
- Átirányítás innen:
https://example.com/.*(Reguláris kifejezés) - Átirányítás ide:
$0?layout=desktop
A $0 a cél URL-re hivatkozik. Ha megpróbálja elérni az example.com/hello címet, akkor átirányításra kerül az example.com/hello?layout=desktop címre. Ezt a funkciót helyettesítésnek nevezzük.
A helyettesítés a Helyettesítő karakter módban is elérhető, mivel belsőleg reguláris kifejezéssé alakul.
Azonban van néhány probléma ezekkel a beállításokkal.
1. probléma: Végtelen ciklus
A jelenlegi beállítás végtelen átirányítási ciklust hoz létre, mivel a https://example.com/.* a https://example.com/hello?layout=desktop címet is megcélozza.
Ebben az esetben megadhat egy kizárt URL-mintát, amely lehetővé teszi az átirányítás nélküli hozzáférést, például így, reguláris kifejezéssel:
.*[&?]layout=[^&]*.*
.*: Bármit illeszt[&?]:&vagy?illesztése[^&]*: Bármit illeszt, kivéve&
2. probléma: Nem tudja megfelelően kezelni a meglévő paramétereket
Ha a cél URL már tartalmaz más lekérdezési paramétereket, például example.com/hello?theme=dark, akkor a cél example.com/hello?theme=dark?layout=desktop lesz (két ? van az URL-ben), de a paramétereket csak &-vel lehet összekapcsolni. A ? mint speciális karakter csak a paraméterek elején engedélyezett. Tehát nem érvényes paraméterként kezelődik.
Ebben az esetben módosítsa a beállításokat a következőképpen:
- Átirányítás innen:
(https://example.com/[^?]*)(\(.*))? - Átirányítás ide:
$1?layout=desktop&$3
Nézzük meg lépésről lépésre.
(https://example.com/[^?]*): Illeszkedik a?előtti részre.[^?]*bármit illeszt, kivéve?.- Ez
()-vel van körülvéve, így később$1-gyel hivatkozhat rá.
(\(.*))?: Illeszkedik egy?-vel kezdődő karakterláncra, ami lekérdezési paramétereket jelent.- Ez üres karakterláncot is illeszt a minta végén lévő
?kvantifikátorral, ami nulla vagy egy alkalommal illeszt. - A külső
()és a belső()később$2-vel és$3-mal hivatkozható.
- Ez üres karakterláncot is illeszt a minta végén lévő
A RegExr segíthet a részletek megértésében.
A RegExr hibát jelez, ha nem menekíti a / karaktert \-vel. Bár menekítheti, nem kötelező, mivel a Redirect Web egy másik, Apple által fejlesztett motort használ, amely nem igényli a menekítést.
Ez nem tökéletes megoldás, mivel az example.com/hello címet example.com/hello?layout=desktop& címre irányítja át, amely egy felesleges & karaktert tartalmaz az URL végén. Ez általában nem nagy ügy, de ha el szeretné távolítani, használhatja a Rögzítőcsoport-feldolgozást.
Összefoglalva, ez a végeredmény:
- Átirányítás innen:
(https://example.com/[^?]*)((\(.*))?)(Reguláris kifejezés) - Átirányítás ide:
$1?layout=desktop$3 - Kizárt URL minta:
.*[&?]layout=[^&]*.*(Reguláris kifejezés) - Rögzítőcsoport-feldolgozás:
- Csoport:
$3 - Folyamat: Előfordulások cseréje
- Cél:
\?(.*) - Csere:
&$1
- Cél:
- Csoport:
Ez csupán egy példa. Több szabályt is létrehozhat az egyes problémák kezelésére. Ez sokkal egyszerűbb lehet.