Keresőbarát URL-ek IIS 7 alatt

Korábban már írtam az IIS 7-ben található request filtering komponensről, amely segítségével a bejövő URL-eket lehet szétszabdalni és bizonyos szempontok szerint engedélyezni vagy tiltani a kérés feldolgozását. Van egy másik eset, amikor a bejövő URL-t kell felparszolni, ez pedig virtuális URL-ek használatakor fordul elő. Vagyis amikor article.aspx?id=123 helyett barátságosabb, például article/123 formátumú címet szeretnénk használni. Erre szolgál az IIS 7-hez letölthető URL Rewrite Module komponens is.

A funkció egyébként nem új, az Apache mod_rewrite komponense már régóta tudja, de IIS alatt eddig csak fizetős komponenssel vagy egy kis ASP.NET programozással lehetett ezt a feladatot megoldani. ASP.NET-ben írtuk meg egyébként a korábbi devPortal és az MSDN Kompetencia Központ adatbázis alapú virtuális URL mappingjét is…

Szerencsére most már mindez megy kódolás nélkül is, csak le kell hozzá tölteni az ingyenes kiegészítést, ami valószínűleg az SP2-től már az IIS 7 része lesz. Az URL Rewrite modul segítségével a bejövő kérésnek gyakorlatilag bármely részére megfogalmazhatunk illeszkedési feltételt: az URL-re, a HTTP fejléc mezőkre, a query stringre vagy akár szerver változókra. Az illeszkedési feltételt megadhatjuk egyszerű wildcardos vagy reguláis kifejezés formájában. Ha a modulnak sikerül az általunk megadott szabályt ráillesztenie egy bejövő kérésre, a szabályban megadott címre irányítja át a kérést.

A dologban nem csak az a szép, hogy minden beállításunk a web.configban együtt utazik az alkalmazással, hanem az is, hogy az IIS Managerben a modulhoz tartozó grafikus felületen számos segítséget kapunk a szabályok szerkesztéséhez. Például sablonok és tesztelési felület is rendelkezésre áll.

Például valószínűleg sokan írtunk már le valami hasonlót:

    <asp:HyperLink runat="server" 
Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("ID", "Article.aspx?id={0}") %>' />

Sokkal szebb lenne, ha ezt írnánk:

    <asp:HyperLink runat="server" 
Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("ID", "Article/{0}") %>' />

Ahhoz, hogy ez működjön, persze kell egy kicsit varázsolni az IIS Managerben. Az URL Rewrite modulban kattintsunk az Add Rules… gombra, majd válasszuk a User friendly URL sablont: URL Rewrite: új szabály létrehozása

Adjuk meg azt az URL-t, amivel most működik az alkalmazásunk és válasszuk ki azt, ahogy a felhasználóknak láttatni szeretnénk a címet. Itt érdemes arra figyelni, hogy bár címként a szerver nevét is meg kell adni, az illesztési mintában és az átírt címben erre nincs szükség. Szintén érdemes kihagyni az alkalmazásunk virtuális mappáját.

URL Rewrite: új szabály létrehozása varázslóval

Ha az alsó Create corresponding redirect rule jelölőnégyzetet bekattintjuk, akkor a nem kívánatos query stringes címről is át lesznek irányítva a kérések a barátságos címre.

A varázsló leokézása után a megjelenő új szabályra duplán kattintva módosíthatjuk azt:

URL Rewrite: szabály szerkesztéseJó tudni, hogy itt válthatunk át reguláris kifejezésekről egyszerű wildcardos keresésre, illetve itt található a Test pattern funkció is, ahol kipróbálhatjuk, hogy a mintánk jól működik-e az általunk megadott URL-re.

A sok kattintgatás eredménye a web.configban található:

    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                    <match url="^article/([^/]+)/?$" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="article.aspx?id={R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

Ennyi az egész, máris működik! Persze csak akkor, ha mindent jól csináltunk. Ha nem, akkor 404 – Not Found hibaüzenetet fogunk kapni. Akkor nincs más hátra, elő kell kapnunk az IIS 7 Failed Request Tracing szolgáltatását és meg kell néznünk, hogy az URL Rewrite modul működik-e vagy sem. Vegyünk fel egy új tracing szabályt a 404-es hibakódra és a trace providerek közül válasszuk ki a Rewrite komponents:

URL Rewrite: failed request tracing

Kérjük le az oldalt, majd nézzük meg a logot a C:\inetpub\logs\FailedReqLogFiles\W3SVC1 mappában:

URL Rewrite: failed request tracing log

A PATTERN_MATCH és RULE_EVALUATION_END szekciókban figyeljük a Matched és a Succeeded értékeket. Ha false, akkor bizony valamit nem jól csináltunk. Én így jöttem rá, hogy az alkalmazás mappájának nevére (a fenti képen UrlRewriteSample) nincs szükség…

Ez persze csak egy alkalmazása az URL Rewrite modulnak…


zip UrlRewriteSample.zip (4 kB)


Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2009.01.10. 7:00:00 | Permalink | Hozzászólások: 0 | Tárgyszavak: ,


  • IIS 7 és a Home Editionök

    Balássy György (MS RD, ASP.NET MVP, MCTS) Érdekes módon lehet IIS 7-et telepíteni a különböző Vista és Windows 7 Home Editionökre, csak éppen az eredmény nem mindig egy működő webkiszolgáló lesz. Ráadásul nagy különbségek vannak a Home Basic, Starter és Premium változatok között. Tovább »
  • Karácsonyi ASP.NET vezérlő

    Dávid Zoltán Először is szeretnék a teljes szerkesztőség nevében mindenkinek útólag is Békés Boldog Karácsonyt és előre is Sikeres, Nyugodt Új Évet kívánni. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások