Podle mého názoru jsou pěkná URL na webu vším hodně
důležitou věcí. Možná existují průzkumy o tom, že koncoví
uživatelé se o URL zas až tak nestarají, ale třeba mně se často
stává, že pokud se na mne ze stavového řádku směje zcela nečitelné
„GUID-URL“, odkaz prostě nenavštívím. U velkého projektu,
na kterém teď dělám v práci, jsem se navíc rozhodl na pěkných URL
postavit i docela zásadní kusy aplikační logiky, protože to prostě na
webu dává smysl – je třeba jednoduché připravit jednu šablonu pro
stránky /insurance/* a jinou pro stránky /branch/*, zatímco při adresách
index.php?page=123 by to vyžadovalo nějakou jinou fintu.
Osobně, z pohledu pohodlného Františka uživatele, dávám přednost Windows hostingu před Linuxovým, protože mi to většinou ušetří dost starostí – ovšem jen do chvíle, než dojde na URL rewriting. Tam se bohužel věci na chvíli obrátí a z přímočarého mod_rewrite je potřeba vrhnout se do víru různých alternativ, méně či více povedených. Dneska jsem trpce sbíral zkušenosti s několika z nich, tak se o ně rád podělím.
Začnu pozitivní zprávou: s příchodem IIS 7 tento problém zcela odpadne, protože na libovolný web request bude možné nasadit filtr napsaný v .NETu. To samozřejmě neřeší problém samo o sobě, ale jsem si jistý, že se různých URL rewriterů objeví jak hub po dešti. Dnes je nutno zabývat se programovacím jazykem C (co to je?), složitým rozhraním ISAPI filtrů a podobně, na což mají žaludek jen ti nejlepší. Není tak divu, že dnes existují vlastně jen 2 použitelné produkty:
- ISAPI_rewrite
- IIRF (Ionic's Isapi Rewrite Filter)
První používám pro pěkná URL na tomto webu, protože je tento software nainstalován na Aerohostingu. Nikdy jsem s ním však nebyl moc spokojen: nejvíc mi vadí syntaxe regulárních výrazů, která je taková divná. Kvůli tomu člověk moře času stráví laděním svého httpd.ini souboru, což není žádná sranda – něco jako debuggování neexistuje, a jestli platí pořekadlo „máte problém a rozhodli jste se ho vyřešit regulárním výrazem; teď máte problémy dva“, pak si asi dovedete představit ten zmatek, když se při různých requestech aplikuje pravidel hned několik.
S radostí jsem proto sáhnul po produktu druhém – IIRF – který je jednak zadarmo (a open source, pokud to v tomto případě hraje roli), a druhak používá PERL-compatible regulární výrazy (hurá!). Další senzační vlastností je fungující „-f“ a „-d“ známé z mod_rewrite, takže se dá napsat podmínka „pokud požadavek xyz směruje na soubor, který se nachází na disku, udělej něco“. Tohle ISAPI_Rewrite neumí.
Bohužel má IIRF několik zásadních vad:
- Nepodporuje konfigurační soubory pro jednotlivé virtuální weby (všechna pravidla jsou v jediném, hlavním souboru). Tohle lze řešit několikanásobnou instalací, ale už vidím, jak se s tím nějaký hosting dělá. Možná se vám zdá, že pokud máte vlastní server, ještě nějaká naděje zbývá, ale…
- … dneska jsem ztratil kupu hodin řešením „drobných“ problémů, jako proč se nenačítá konfigurační soubor, proč nejde změněný konfigurační soubor uložit (!) a proč nám sakra přestaly fungovat všechny firemní weby (!!) (Připadá vám šílené, že nemáme testovací server, kde by se dalo vše nanečisto vyzkoušet? Nejste sami, mně to teda rozhodně šílené připadá – inu, Anglie).
Deprimován a zdeptán jsem rezignoval na kombinaci Windows 2000 (IIS 5) plus IIRF a se skopenýma ušima jsem se vrátil k ISAPI_rewrite. Na jednu stranu se netěším na ladění regulárních výrazů a na vytváření super-komplikovaných podmínek, abych nahradil Apachovské „-f“, ale na druhou stranu se jedná o produkt, který „prostě funguje“ – spustil jsem .msi, proběhla instalace (která bez optání restartovala IIS server !! – to snad ani není možné, co všechny si vývojáři občas dovolí…), a od té doby všechno krásně šlape. Žádné zamčené soubory, žádné chyby v načítání ISAPI filtru, prostě pohoda. Pořád si opakuju – „to není tím, že ISAPI_rewrite je komerční, zatímco IIRF je open source; to není tím, že ISAPI_rewrite je komerční, zatímco IIRF je open source…“ :)
Takže – pokud potřebujete pěkná URL pod IIS, doporučuji stáhnout IIRF, zkusit nainstalovat, pokud vše funguje, máte vyhráno, pokud ne, ruce pryč. Šetřete čas a nervy a sáhněte po ISAPI_rewrite, které taky umí být (při určitých omezeních) zdarma. Sice moc dobře nechápu, jaktože za těch mnoho let, co existuje mod_rewrite, nevzniknul nějaký ISAPI filtr, který by uměl zpracovat přímo .htaccess soubory, ale bohužel tomu tak je, a tak než přijde IIS 7, musíme se spokojit s tím, co je.
P.S. Před pár dny psal o URL rewritingu sám velký ScottGu. Zajímavé čtení, jako vždy.
Filtry v .Netu lze používat i u starších verzí IIS, viz http://interval.cz/…o-v-asp-net/ – na Cool URIs ale není .Net zapotřebí, stačí IIS6 (pro jednodušší stránky i předchozí verze) a do těchto serverů defaultně zabudované ASP, viz http://interval.cz/…l-krasnejsi/