Bir çok internet sitesinde karşılaştığımız 2009/03/06/deneme.aspx gibi linkler kuşkusuz hepimizin hoşuna gitmiştir.Bu tür link sistemi ile sayfalarımız hem seo hemde kullanıcı dostu sayfalar haline gelmekte.Url rewrite ile bir çok makale var fakat yeterli olmadığını düşünerek ve yeni başlayan arkadaşlarımızın daha iyi anlayabilmeleri için bu işi genel kodlama ile yapmaya çalıştım.Kodlarından esinlendiğim için Gökhan Bağcı ve Sunalı arkadaşlarıma teşekkür ederim.

Lafı uzatmadan başlayalım hemen,biliyorum hepiniz beni bekliyorsunuz.

Öncelikle bu uygulama HttpModule ile yapılacağı gibi Global.asax ilede yapılabilir.Ben HttpModule kullanmayı tercih ettim.

Var olan bir projemiz var yada yeni bir proje yaratıcak isek Öncelikle projemize bir App_Code klasörü ekleyelim.

App_code Klasörümüze bir yane class ekleyelim.

Ve class içeriğimizi aşağıdaki gibi değiştirelim

   1: public class extools
   2: {
   3:     public static string ReWriterPath(string ID, string Baslik,string Tip)
   4:     {        
   5:         //Adresimizi düzenliyoruz
   6:         string Temp = "";
   7:         Temp = Baslik.ToLower();
   8:         Temp = Temp.Replace("-", ""); Temp = Temp.Replace(" ", "-");
   9:         Temp = Temp.Replace("ç", "c"); Temp = Temp.Replace("ğ", "g");
  10:         Temp = Temp.Replace("ı", "i"); Temp = Temp.Replace("ö", "o");
  11:         Temp = Temp.Replace("ş", "s"); Temp = Temp.Replace("ü", "u");
  12:         Temp = Temp.Replace("\"", ""); Temp = Temp.Replace("/", "");
  13:         Temp = Temp.Replace("(", ""); Temp = Temp.Replace(")", "");
  14:         Temp = Temp.Replace("{", ""); Temp = Temp.Replace("}", "");
  15:         Temp = Temp.Replace("%", ""); Temp = Temp.Replace("&", "");
  16:         Temp = Temp.Replace("+", ""); Temp = Temp.Replace(".", "-");
  17:         Temp = Temp.Replace("?", ""); Temp = Temp.Replace(",", "");
  18:  
  19:         //Tip=1 ise video,Tip=2 ise Haber,Tip=3 ise Makale
  20:         switch (int.Parse(Tip))
  21:         {
  22:             case 1:
  23:                 return "Video/" + DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + ID + "-" + Temp + ".aspx";
  24:                 break;
  25:             case 2:
  26:                 return "Haber/" + DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + ID + "-" + Temp + ".aspx";
  27:                 break;
  28:             case 3:
  29:                 return "Makale/" + DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + ID + "-" + Temp + ".aspx";
  30:                 break;
  31:             default:
  32:                 return "Makale/" + DateTime.Now.Date.Year.ToString() + "/" + DateTime.Now.Date.Month.ToString() + "/" + DateTime.Now.Date.Day.ToString() + "/" + ID + "-" + Temp + ".aspx";
  33:                 break;
  34:         }
  35:         }
  36: }

Bu class’ımızda adresimizi düzenleyip yeni adresimizi oluşturucaz.Bu Class ile işimiz bitti.Şimdi yeni bir class ekleyelim.

 

Default olarak class içeriği şöyle olucaktır.

   1: public class Class1
   2: {
   3:     public Class1()
   4:     {
   5:         //
   6:         // TODO: Add constructor logic here
   7:         //
   8:     }
   9: }

Biz bu içeriği şöyle değiştirelim.

   1: public class exHttpModule : IHttpModule
   2: {
   3:     public exHttpModule()
   4:     {
   5:  
   6:     }
   7: }

Artık bu class bir HttpModule haline geldi.Şimdi ise düzenlenmiş adresimizi yakalayıp ilgili sayfaya yönlendiricez.

   1: public void Dispose()
   2:     {
   3:  
   4:     }
   5:  
   6:     public void Init(HttpApplication context)
   7:     {
   8:         context.BeginRequest += new EventHandler(Application_BeginRequest);
   9:     }
  10:     void Application_BeginRequest(Object sender, EventArgs e)
  11:     {
  12:         string mypath = HttpContext.Current.Request.RawUrl;
  13:  
  14:         if (mypath.IndexOf("Haber") != -1)
  15:         {
  16:             if (System.IO.Path.GetExtension(mypath) == ".aspx")
  17:             {
  18:                 string[] path = System.IO.Path.GetFileName(mypath).Split('-');
  19:                 HttpContext.Current.RewritePath("~/haber.aspx", "", "id=" + path[0], true);
  20:             }
  21:         }
  22:         if (mypath.IndexOf("Video") != -1)
  23:         {
  24:             if (System.IO.Path.GetExtension(mypath) == ".aspx")
  25:             {
  26:                 string[] path = System.IO.Path.GetFileName(mypath).Split('-');
  27:                 HttpContext.Current.RewritePath("~/video.aspx", "", "id=" + path[0], true);
  28:             }
  29:         }
  30:         if (mypath.IndexOf("Makale") != -1)
  31:         {
  32:             if (System.IO.Path.GetExtension(mypath) == ".aspx")
  33:             {
  34:                 string[] path = System.IO.Path.GetFileName(mypath).Split('-');
  35:                 HttpContext.Current.RewritePath("~/makale.aspx", "", "id=" + path[0], true);
  36:             }
  37:         }
  38:     }

Bu eklemeyi yaptığımızda,düzenlenmiş adresimizi yakalayarak ilgili sayfaya yönlendiriyoruz.

HttpModule içeriğimizin en son hali şu şekilde olucak

   1: public class exHttpModule : IHttpModule
   2: {
   3:     public exHttpModule()
   4:     {
   5:  
   6:     }
   7:     public void Dispose()
   8:     {
   9:  
  10:     }
  11:  
  12:     public void Init(HttpApplication context)
  13:     {
  14:         context.BeginRequest += new EventHandler(Application_BeginRequest);
  15:     }
  16:     void Application_BeginRequest(Object sender, EventArgs e)
  17:     {
  18:         string mypath = HttpContext.Current.Request.RawUrl;
  19:  
  20:         if (mypath.IndexOf("Haber") != -1)
  21:         {
  22:             if (System.IO.Path.GetExtension(mypath) == ".aspx")
  23:             {
  24:                 string[] path = System.IO.Path.GetFileName(mypath).Split('-');
  25:                 HttpContext.Current.RewritePath("~/haber.aspx", "", "id=" + path[0], true);
  26:             }
  27:         }
  28:         if (mypath.IndexOf("Video") != -1)
  29:         {
  30:             if (System.IO.Path.GetExtension(mypath) == ".aspx")
  31:             {
  32:                 string[] path = System.IO.Path.GetFileName(mypath).Split('-');
  33:                 HttpContext.Current.RewritePath("~/video.aspx", "", "id=" + path[0], true);
  34:             }
  35:         }
  36:         if (mypath.IndexOf("Makale") != -1)
  37:         {
  38:             if (System.IO.Path.GetExtension(mypath) == ".aspx")
  39:             {
  40:                 string[] path = System.IO.Path.GetFileName(mypath).Split('-');
  41:                 HttpContext.Current.RewritePath("~/makale.aspx", "", "id=" + path[0], true);
  42:             }
  43:         }
  44:     }
  45: } 

Class yapıları ile işimiz bitti.Şimdi sayfamızdan örnek bir adres gönderelim.

Projemizde default.aspx,haber.aspx,video.aspx ve makale.aspx ÅŸeklinde 4 tane  sayfamız olsun.Default.aspx sayfamızda link sistemini oluÅŸturalım.

Default.aspx:

 

   1: //Yazdığımız class ile yönetemimizi kullanarak adresimizi düzenliyoruz.
   2: <a href='<%=extools.ReWriterPath("1","Hayali Video Sayfası","1")%>'>Video</a><br /><br />
   3: <a href='<%=extools.ReWriterPath("2","Hayali Haber Sayfası","2")%>'>Haber</a><br /><br />
   4: <a href='<%=extools.ReWriterPath("3","Hayali Makale Sayfası","3")%>'>Makale</a>

Böylece adresimiz ilk eklediğimiz class da belirtmiş olduğumuz gibi

Video/2009/3/6/1-hayali-video-sayfasi.aspx gibi bir adrese dönüşmüş oldu.Linkimize tıkladığımızda httpmodule class’ımız adres çubuğundaki düzenlenmiş yeni adresi yakayarak ilgili sayafaya yönlendiriyor.

Ama projemizin çalışabilmesi için web.config dosyamıza aşağıdaki eklemeyi yapmalıyız.

   1: <httpModules>
   2:      <add name="exModuleName" type="exHttpModule"/>
   3: </httpModules>

System.web tagları arasına bu eklemeyi yaptığımızda artık projemiz seo dostu bir link sistemine sahip olmuş olucak.

Fakat burada sayfa uzantılarımız yine aspx olmakta.Sakın html beklemeyin.Html uzantılı sayfalara sahip olmak istiyor iseniz,sunucunuzdan ISS üzerinde ufak bir kaç ayar yapmanız gerekicek.Ayrıca bu projeyi birkaç oynama yaparak daha kısa hale getirebilirsiniz.

 

Kaynak ve örnek projeye buradan ulaşabilirsiniz

Technorati Etiketleri: ,,,,

Her detayını tek tek anlatamanın çok uzun olacağını düşünerek,kısa ve öz olarak anlatmaya çalıştım.Hepinize bol .Net li  günler