Bu yazımızda başka bir url rewrite yönteminden bahsedicem sizlere.Öncelikle bu yöntemin diğer yöntemlerden daha basit ve daha kullanışlı olduğunu söylemek isterim.Kısaca Özetlemek gerekir ise;Web.Config Dosyanıza url kuralları giriyoruz ve bu kurallara uygun linkler yaratıp çağırdığımızda işimiz bitmiş oluyor.Şimdi nasıl yaıldığını detaylı olarak inceleyelim.

Öncelikle şu adresden gerekli kütüphanemizi indirelim.

Her zaman ki gibi bu kütüphaneyi projemize referans olarak ekleyelim.

Şimdi sıra Web.Config Dosyamızı yapılandırmaya geldi.Örnek olarak Web.Config Dosyamız şu şekilde olsun,

Bu kısım Section Group

   1: <section name="urlrewritingnet"
   2:             requirePermission ="false"
   3:             type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"  />

Bu kısım Kurallarımız

   1: <urlrewritingnet
   2:    rewriteOnlyVirtualUrls="true"
   3:    contextItemsPrefix="QueryString"
   4:    defaultPage = "default.aspx"
   5:    defaultProvider="RegEx">
   6:     <rewrites>
   7:       <add name="1"  virtualUrl="^~/firmalar/(.*)/(.*)/(.*)/(.*)/(.*).aspx"
   8:            rewriteUrlParameter="ExcludeFromClientQueryString"
   9:            destinationUrl="~/firma_detay.aspx?id=$4"
  10:            ignoreCase="true" />
  11:       <add name="2"  virtualUrl="^~/sehire-gore/(.*)/(.*)/(.*)/(.*)/(.*).aspx"
  12:            rewriteUrlParameter="ExcludeFromClientQueryString"
  13:            destinationUrl="~/sehir.aspx?id=$4"
  14:            ignoreCase="true" />
  15:       <add name="3"  virtualUrl="^~/kategoriye-gore/(.*)/(.*)/(.*)/(.*)/(.*).aspx"
  16:            rewriteUrlParameter="ExcludeFromClientQueryString"
  17:            destinationUrl="~/kategori.aspx?id=$4"
  18:            ignoreCase="true" />
  19:     </rewrites>
  20:   </urlrewritingnet>
   1: <httpModules>
   2:         <add name="UrlRewriteModule"
   3:           type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
   4:         <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
   5:       </httpModules>

Burada yaptıklarımızı kısaca anlatmak gerekir ise;

Adreslerimizin nasıl olmasını istiyor isek o şekilde düzenlemeler yapıyoruz şöyleki;

/firmalar/(.*)/(.*)/(.*)/(.*)/(.*).aspx

Bu kısımda  (.*) ifadesini içeren yerlere istediğimizi yazabiliriz.Ben ay/gün/yıl yazmayı tercih ettim örneğimde.

destinationUrl=”~/firma_detay.aspx?id=$4″

Bu kısımda ise aslında sayfamızın hangi sayfa olduğunu belirtiyoruz.Burada ki  $4 ifadesi ise bizim querystringimize karşılık gelen (.*) ifadesinin sırası.

Burada dikkat etmeniz gereken ve gözden kaçabileceğini düşündüğüm bir nokta var.<add name=”1” şeklinde tanımladığım kural adları birbirlerinden farklı olmalı.Yoksa link sistemimiz düzgün çalışmayabilir.

Şimdi sıra var olan adreslerimizi kurallarımıza göre düzenlemeye geldi.Onun için bir class yazalım.Class içeriğimiz şöyle olsun,

   1: public static string ReWriterPath(string id, string Baslik,string tip)
   2:     {
   3:         string Temp = "";
   4:         Temp = Baslik.ToLower();
   5:         Temp = Temp.Replace("-", ""); Temp = Temp.Replace(" ", "-");
   6:         Temp = Temp.Replace("ç", "c"); Temp = Temp.Replace("ğ", "g");
   7:         Temp = Temp.Replace("ı", "i"); Temp = Temp.Replace("ö", "o");
   8:         Temp = Temp.Replace("ş", "s"); Temp = Temp.Replace("ü", "u");
   9:         Temp = Temp.Replace(""", ""); Temp = Temp.Replace("/", "");
  10:         Temp = Temp.Replace("(", ""); Temp = Temp.Replace(")", "");
  11:         Temp = Temp.Replace("{", ""); Temp = Temp.Replace("}", "");
  12:         Temp = Temp.Replace("%", ""); Temp = Temp.Replace("&", "");
  13:         Temp = Temp.Replace("+", ""); Temp = Temp.Replace(".", "-");
  14:         Temp = Temp.Replace("?", ""); Temp = Temp.Replace(",", "");
  15:         if (tip == "1")
  16:         {
  17:             return "/firmalar/"+DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + id + "/" + Temp + ".aspx";
  18:         }
  19:         if (tip == "2")
  20:         {
  21:             return "/sehire-gore/" + DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + id + "/" + Temp+"-tekstil-firmalari" + ".aspx";
  22:         }
  23:         if (tip == "3")
  24:         {
  25:             return "/kategoriye-gore/" + DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + id + "/" + Temp + ".aspx";
  26:         }
  27:         return DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + id + "/" + Temp + ".aspx";
  28:
  29:         }

Burada ben az önce de bahsettiğim gibi ay-gün-yıl kullandık siz başka bir ifade kullanabilirsiniz.Şimdi bu class’ımızı sayfamızda nasıl kullanıldığını inceleyelim.

   1: <a href='<%=extools.ReWriterPath((Eval("ID").ToString()),(Eval("firma_isim").ToString()),"1") %>'>Firma adı</a>

İşte hepsi bu kadar.Sayfamızı çağırdığımızda oluşturduğumuz url kurallarına göre yeni bir adres ortaya çıkarttık.Sanırım Asp.Net’te SEF bu kadar kolay.

Bu yöntem tavsiyemdir arkadaşlar.Bu yöntemde postback ve masterpage sorunu yoktur.Diğer yöntemden eski yazılarımda bahsetmiştim.Eski yöntem biraz daha uğraştırıcı ve sorunlu.Ama nasıl çalıştığını görmek açısından o yöntemide incelemenizi tavsiye ederim.

Örnek Projeyi buradan indirebilirsiniz.

Demo için http://www.tekstil-firmalari.net

Hepinize bol .Netli günler.