Webmasterların url yapılarının istedikleri gibi değiştirmek istemesine kayıtsız kalmayan Microsoft, iis 7 için Url Rewrite modülünü ek özellik olarak 2008'in son aylarında sundu. 1.0 versiyonu ile başlanan modül yakın zamanda (Nisan 2009) 1.1 versiyonunun çıkmasıyla yeni özelliklere sahip oldu ve bizlerin işini de oldukça kolaylaştırdı.

Bu yazımda modülün kurulumu ve kullanılmasıyla ilgili bilgi vermeye çalışacağım.

Kurulum
x86 vista ve 2008 server için Microsoft URL Rewrite Module 1.1 for IIS 7 (x86) : Download : The Official Microsoft IIS Site adresinden,
x64 vista ve 2008 server için Microsoft URL Rewrite Module 1.1 for IIS 7 (x64) : Download : The Official Microsoft IIS Site adresinden modülümüzü bilgisayarımıza indirip kuruluma geçiyoruz.

eğer daha önceden 1.0 versiyonunu kurmuş iseniz, her hangi bir değişiklik yapmanıza gerek yok. Kurulum önceki versiyonu kaldırıp yerine yenisini kuracaktır.

Yeni versiyonun kurulmasından sonra bilgisayarımızın yeniden başlatılmasını istemiyorsak, aşağıdaki komutu, komut satırına yazarak kullanabilirsiniz.
net stop was /y & net stop wmsvc
Kurulum işlemi tamamlandıktan sonra, (bilgisayarımızı yeniden başlatmadıysak) aşağıdaki komutları, komut satırına sırasıyla yazarak iis'yi yeniden başlatalım.
net start w3svc
net start wmsvc
artık yeni kurallar yazarak urlrewite modülü kullanıma hazır.


ReWrite kuralı yazalım

makale.aspx adlı bir asp.net sayfası oluşturalım ve root klasörümüze kaydedelim.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test Sayfası</title>
</head>
<body>
      <h1>URL Rewrite Module Test Sayfası</h1>
      <table>
            <tr>
                  <th>Server değişkeni</th>
                  <th>Değer</th>
            </tr>
            <tr>
                  <td>Orijinal URL: </td>
                  <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
            </tr>
            <tr>
                  <td>En son URL: </td>
                  <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
      </table>
</body>
</html>
Dosyamızı kaydetdikten sonra, http://localhost/makale.aspx yazarak sayfamızın düzgün çalışıp çalışmadığını kontrol edelim. (Eğer adres satırımız localhost dışında bir adres içerecekse localhost kısmına doğru adresi yazın)

http://localhost/makale/452/makale-basligi-buraya.html
sayfası çağırıldığında;
http://localhost/makale.aspx?id=452&...basligi-buraya adresinden makalemizin görüntülemesini için kural yazacağız.
  1. IIS Managerı açalım
  2. Siteler kısmından web sitemizi seçelim
  3. özelikler kısmında Url Rewrite simgesi bulup çift tıklayalım
  4. Sağ üst köşeden Add Rules (Kural Ekle)'ye tıklayalım.
  5. Açılan pencerede hangi şablonda kural eklemek istediğimiz sorulacak, biz blank rule (boş kural)'ı seçerek tamama tıklayalım.
  6. Edit role penceresine ulaştık,
    Name(İsim) kısmı bizim içindir. yani yazılacak kelime ya da kelimeler bize kural için ipucu verecektir. Yazacağımız kelimede serbestsiniz. Ancak aynı ismi iki farklı kuralda kullanamazsınız. Bundan sonra eklenecek kurallar için yeni isim kullanmanız gerekecektir. Ben bu bölüme makale adını verdim.

    Requested Url bölümünden mathes the pattern yazan, Using bölümünde ise Regular expression varsayılan şekilde seçilmiş olmalıdır. Bu bölümlerde başka bir seçenek seçilmişse düzeltin.
  7. Pattern bölümüne web adresimizi yeniden yazmak istediğimiz regular expression kodumuzu yazıyoruz.
    ^makale/([0-9]+)/([_0-9a-z-]+)
    bu kod ile
    - içerisinde makale/0-9 arası rakamlar/0-9 arası rakamlar, a'dan z'ye harfler ve - içeren url çağırıldığında kuralımız devreye girecektir.
  8. Rewite URL yazan yere hangi sayfaya yönlendireceğimizi yazıyoruz
    makale.aspx?id={R:1}&baslik={R:2}
    buradaki {R:1} Regular expression eşleşmesi yapan ilk bölümü temsil eder, ikinci / (slash) işareti arasında kalan sonucu belirtir. Biz bu bölümü 0-9 arası rakamlardan oluşacağını belirtmiştik. makale.aspx dosyasına id query stringi olarak gönderiyoruz.

    {R:2} ise kurala yazdığımız son regular eşleşmesini verecektir ([_0-9a-z-]+) bu değerde makale.aspx dosyasına baslik query string'i olarak gönderilecektir.
  9. sağ üst köşede bulunan Apply tıklayarak kuralımızı kaydedelim.
  10. Back to rules (Kurallara geri dön)'e tıklayarak URL Rewrite modülümüzde kuralımızın eklendiğinden emin olalım.
  11. Şimdi tarayıcımızın adres satırına yazalım http://localhost/makale/452/makale-basligi-buraya.html
  12. Açılan sayfada;
    - orijinal url bölümünde /makale/452/makale-basligi-buraya.html
    - en son url bölümünde makale.aspx?id=452&baslik=makale-basligi-buraya yazdığını göreceksiniz.
Bundan sonrası size kalmış. istediğiniz kadar urlRewrite kuralı oluşturabilirsiniz. yazdığımız kuralı Url Rewrite modülü Web.Config dosyasına kaydettiği için, Url Rewrite modülü yüklü her hangi bir iis 7.0'da rahatlıkla çalışacaktır. Web.Config dosyamızı inceleyecek olursak:
<system.webServer>
        <rewrite>
            <rules>
                <rule name="makale">
                    <match url="^makale/([0-9]+)/([_0-9a-z-]+)" />
                    <action type="Rewrite" url="makale.aspx?id={R:1}&amp;baslik={R:2}" />
                </rule>
            </rules>
        </rewrite>
</system.webServer>
kodlarının eklenmiş olduğunu görürsünüz. Kuralları isterseniz direk Web.Config dosyasına da yazabilirsiniz. UrlRewrite modülünün arayüzünün artılarından birisi Test Pattern özelliği ile yazdığınız kuralın istediğiniz gibi çalışıp çalışmadığını kontrol edebilme imkanını tanımasıdır.

Gelecek makalemde UrlRewrite ile devam etmeyi planlıyorum.