👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

Pěkná URL pod IIS

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:

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:

  1. 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…
  2. … 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.

Zařazeno do kategorií |
Krapeš (St, 2007-03-21 00:52):

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/

Borek (St, 2007-03-21 13:39):

ISAPI filtr momentálně považuji za nejspolehlivější možnost. Použití .NET filtrů v současném IIS i přesměrování pomocí 404ky jsem se z určitých důvodů vyhnul (ASP neznám, v PHP to zlobí, jsou problémy s IIS logy apod.). Ale asi jsem to měl v článku zmínit jako alternativy, díky za doplnění.

Michal Pelikan (St, 2007-03-21 01:35):

co pouzit fintu s 404-kou http://kodytek­.net/…rewrite­.html

Ivo Toman (St, 2007-03-21 08:37):

Děkuji za zajímavé informace, právě jsem se po těchto informacích pachtil a jen co mrknu na čtečku, mám to tam. Prostě paráda :D

Libor (St, 2007-03-21 10:18):

Díky za „rozšíření obzorů“, ale nač si komplikovat život, když kombinace linux+apache+mod_rew­rite tak krásně a jednoduše funguje :) .

Borek (St, 2007-03-21 13:41):

Nezapomínej, že ne vždy máš serverovou platformu na výběr. (Pokud si myslíš že ano, zkus přesvědčit mé šéfy k přechodu na Linux.)

kajinek32 (St, 2007-03-21 12:40):

moc pěkná metoda, která mi přijde jako nejjednodušší je popsaná zde: http://trupik­.aspweb.cz/…-aspnet.aspx

rarouš (Čt, 2007-03-22 16:47):

To je ale .Net řešení, ne IIS. V PHPku to třeba nepojede :)

Vyhny (Čt, 2007-04-05 21:16):

A co tohle?S uspeche jsem to pouzival. http://www.ur­lrewriting.net/en/De­fault.aspx

Čuga (So, 2008-08-16 18:58):

Cauko, jednomu klientovi jsem nainstaloval ISAPI_Rewrite version 3.0.

Instalace se nijak neprojevila a ani po vlozeni .htaccess souboru se nic nedelo. Nic dalsiho jsem neprovadel, ale zaroven se mi v dokumentaci nepodarilo dohledat, ktery krok jsem opomnel.

Predem diky

Borek (Ne, 2008-08-17 09:27):

Instalace ISAPI_Rewrite funguje naprosto bez problémů, musí to být nějaký problém specifický pro tvůj server. Zkus kontaktovat podporu.

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.