Nette je výborný PHP framework založený na MVC struktuře obsahující spousty moderních vymožeností atd. atd. O dobrých vlastnostech Nette bych tu mohl psát ještě dlouho. Pokud na localhostu i hostingu používáte apache server podporující mod_rewrite a .htaccess, nebudete mít vůbec žádné problémy se správnou funkčností frameworku včetně routování, které je právě na mod_rewrite závislné. Mně se však stalo, že jsem musel svůj web hostovat na Microsoft serveru IIS. Ti znalejší ví, že IIS nepodporuje sobory .htaccess a má jiný systém přepisování url. Tak jak tedy rozjet routování v Nette aplikaci běžící na IIS serveru?
.htaccess vs web.config
Struktura základního nette .htaccess je následující:
[sourcecode]# disable directory listing
Options -Indexes
# mod_rewrite
RewriteEngine On
#RewriteBase /
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
[/sourcecode]
Abychom rozjeli routování a přepisování na naše velmi cool URLs musíme tento .htaccess soubor portovat na soubor web.config, který používá IIS. Výše zmíněný .htaccess převedený do web.config by měl vypadat následovně:
[sourcecode language="xml"]
[/sourcecode]
Tento soubor pak uložíme do stejného adresáře, kde se nachází .htaccess, často to bývá adresář document_root
.
Trochu na vysvětlenou
Jak je jistě vidět, web.config je XML soubor definující všechno možné. Nastavení přepisovaných URL je v sekci <rewrite>
. Tato sekce obsahuje sobor pravidel (<rules>
), každé jako samostatný tag (<rule>
) uvnitř kterého mohou být podmínky (<conditions>
), jsou zde specifikovány URL adresy, které vyhovují danému pravidlu (<match>
) a také jiné URL adresy, na které se mají vyhovující URL přepsat (<action>
).
Samotná dokumentace pro strukturu souboru web.config nejspíš neexistuje, jelikož, jak praví můj kamarád – windowsový adminisrátor a znalec prostředí .NET – programátoři by vůbec neměli do web.config ručně zasahovat, takže Microsoft nepovažoval za nutné k tomuto souboru vytvářet dokumentaci. Pokud budete úspěšnější než já a podaří se vám něco o web.config vygooglit, nebojte se o své tipy podělit v komentáři.