Nette, IIS a web.config

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í:

# 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]

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ě:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Nette App Rule">
<match url="^\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$" ignoreCase="false" negate="true" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

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.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • LinkedIn
  • Twitter
  • MySpace
  • Google Bookmarks
  • Technorati
  • email
  • PDF

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Comments are closed.