Webové úterý - URL rewriting na IIS serveru

Dnes se podíváme na URL rewriting a jaké jsou možnosti jeho použití na IIS serveru. V dnešní době je URL rewriting pro každý web téměř podmínkou. Ale co to vlastně ten URL rewriting je? Jak napovídá překlad, jde o přepisování URL adres. Jde tedy o způsob, jak převést dynamicky generované odkazy stránek na formu, která je pro obyčejného návštěvníka mnohem příjemnější. A nejen pro něj. Využítí najdou i roboti, kteří indexují obsah internetu a můžete jím dopomoci lepší pozici ve výsledcích hledání (tzv. SEO- search engine optimization). Každý jistě potvrdí, že odkaz https://mujobchod.cz/show_goods.php?id=1234 nic moc neříká. Po přepsání URL by mohl vypadat například takto: https://mujobchod.cz/zbozi/granule-pro-psy/1234, a to už napovídá, o jaké zboží jde, popř. jsme schopni z odkazu vyvodit přesnější závěr. Pokud se chcete opakovaně na stránku dostat, stačí napsat do adresního řádku část adresy a funkce autocomplete vám stránku nabídne.

Možností použítí URL rewritingu je více. Můžete si napsat vlastní řešení nebo použít hotové. Na IIS 7 a IIS 7.5 serveru je dostupné použití ISAPI rewrite nebo URL rewrite modulu. ISAPI rewrite component je kromě standardních doplňků z IIS webu k dispozici mnohem více. V praxi se nám nejvíce osvedčil ISAPI_Rewrite 3 od společnosti HeliconTech. Jeho výhodou je, že lze použít klasický .htaccess s pravidly pro URL rewrite, jako na webovém server Apache. Pokud chcete provozovat PHP na Windows, je přechod z Apache na IIS v tomto směru naprosto bezproblémový. Nevýhodou je, že jde o placenou komponentu. Existuje také lite verze zdarma, které má však omezení.

Další možností je použít URL rewrite modul určený právě pro IIS7 a IIS 7.5. Jde o rozšíření, které je zdarma ke stažení na webu IIS. Jeho výhodou a zároveň nevýhodou je, že pravidla se píší ve web.configu. Struktura pravidel je o něco složitější, než v .htaccessu, pro někoho to tedy může znamenat nepříjemnou změnu, ale jde pouze o zvyk. Používáte-li URL rewriting přes .htaccess a chcete přejít na web.config, je velmi snadné převést pravidla pomocí nástroje primo v IIS. Ani tady teda migrace z Apache na IIS není nijak komplikovaná.

Při psaní pravidel se velmi často používají regulární výrazy. Jakým způsobem se provádí zápis by vydalo na spousty dalších článků a na internetu je mnoho materialu, včetně online nástrojů pro porovnání, zda si zdrojová a výsledná URL adresa odpovídá. Např. https://www.regular-expressions.info nebo https://regexlib.com.

Na příkladu si ukážeme, jak vytvořit jednoduché pravidlo. Představte si, že máme obchod a detail jedné položky zboží s ID 1234 se zobrazuje pod URL adresou odkaz https://mujobchod.cz/show_goods.php?id=1234. Chtěl bych, aby se adresa zobrazovala přívětivějším způsobem a to třeba takto https://mujobchod.cz/zbozi/granule-pro-psy/1234. Nejdříve je potřeba připravit regulární výraz, který odpovídá adrese v původním tvaru. Pro https://mujobchod.cz/show_goods.php?id=1234 je to například: ^(.*)/zbozi/(.*)/(.*)$. Adresa je tímto překládacím modulem rozložena do proměnných. První proměnná označená jako $0 je výsledný řetězec. Další odpovídají částem v kulatých závorkách, tedy:

Výsledný řetězec by měl s využitím proměnných vypadat: $1/show_goods.php?zboziID=$3

Pravidlo v .htaccessu vypadá takto:

RewriteEngine on
RewriteRule na-co-se-ptá-klient co-skutečně-dostane [nepovinná-pravidla]

Spojením výše uvedeného dostaneme:
RewriteEngine on
RewriteRule ^(.*)/zbozi/(.*)/(.*) $1/show_goods.php?zboziID=$3 [NC]

Pravidlo ve web.config vypadá následovně:
<rewrite>
<rules>
<rule name="Rewrite pravidlo pro zboží">
<match url="^(.*)/zbozi/(.*)/(.*)$" />
<action type="Rewrite" url="{R:1}/show_goods.php?zboziID={R:3}" appendQueryString="false" />
</rule>
</rules>
</rewrite>

Pravidla se do web.configu ukládají do sekce <system.webServer></system.webServer>. Samotné pravidlo je mezi tagy <rule></rule>. První řádek říká, jak se pravidlo jmenuje, další uvádí výraz, který zachytáváme a poslední udává akci, kterou provádíme, přičemž proměnné se označují {R:cislo} a odpovídá $cislo v .htaccessu.

Jestliže převádíte web z Apache na IIS server, kde je k dispozici pouze URL rewriting modul, je potřeba pravidlo buď přepsat ručně, nebo jednoduše použít nástroj na převod. Celý proces je hotový za pár vteřin.

Máte-li do IIS nainstalován modul IIS rewrite, najdete ho v nastavení jednotlivého webu.
rewrite1

Poklepejte na “Import Rules”
rewrite2

Vložte pravidlo jako text do okna “Rewrite rules” nebo nalistujte soubor s pravidly a klikněte na Import.
rewrite3

Pak stačí potvrdit “Apply” a výsledek ve web.config vypadá takto
rewrite4

Hotovo.

Toto byla jednoduchá ukázka jakým způsobem vytvářet pravidla pro přepisování URL adres. Možností je nepřeberné množství a už záleží jen na potřebách a fantazii tvůrce webu, jak této funkcionality využijí. V každém případě IIS nabízí celou řadu možností, jak pravidla tvořit nebo migrovat z jiných serverů.

Více informací: https://www.iis.net/download/urlrewrite

- Jiří Mísař (Active24)