daha nce grmüştüm yapacaktımda çok uzun ya:SSaol arşive atıyım bi ara deniyecem.. ;) ...

Bazı sitelerin adreslerinin Register a Domain, Find Hosting and Create a Website at Domain.com / / / .aspx şeklinde olduğunu grmüşsünüzdür. rneğin http://blogs.yazgelistir.com/atakan/archive/2005/06/06/175.aspx ve ya kişisel sitem olan http://sunali.com üzerindeki bir yazının adresi olan http://sunali.com/blog/archive/2005/08/23/44.aspx birer rnek olarak gsterilebilir. http://sunali.com/blog/archive/2005/08/23/44.aspx adresi rneği üzerinden gidersek sırasıyla "blog/archive/2005/08/23" klasrleri oluşturulmuş ve bu klasrün içerisinde de "44.aspx" isminde bir dosya olması gerektiğini düşünebilirsiniz. Fakat byle bir zorunluluk yoktur. Asp. Net üzerinde bulunan bir interface'i kullanarak belirtilen adresin - URL kısmında kullanıcının yazdığı adres değiştirilmeden kaldığı halde - başka bir adrese ynlendirilmesini sağlayabilirsiniz. Yine rneğimiz olan http://sunali.com/blog/archive/2005/08/23/44.aspx adresi üzerinden giderek bahsettiğim konuyu bir rnekle açıklamak gerekirse;http://sunali.com/blog/archive/2005/08/23/44.aspx adresini giren bir kullanıcı, http://sunali.com/blog.aspx?BlogID=44 adresine gitse, bizim işimiz çok daha kolay olmaz mı? Dilerseniz kodumuzu hep birlikte yazmaya başlayalım. ncelikle kullanacağımız interface hakkında biraz bilgi edinelim. Kullanacağımız interface'in ismi "IHttpModule" ve "System. Web" namespace'i içerisinde bulunmakta. Bu interface ayrıntılı detaylarına buradan erişebilirsiniz. Kısaca açıklamak gerekirse; IHttpModule size bir HttpModule'ün içerisinde bulunması gereken methodları sunar. HttpModule Asp. Net içerisinde hazır şekilde gelir, gerekli işlem tiplerine gre gerekli karşılamaları sağlar ve gerekli event'leri tetikler. HttpModule geliştirmek için tek ihtiyacınız olan event'leri yakalamak hakkında yeterli bilgiye sahip olmaktır çünkü HttpModule işlemlerinin tamamı "Init" methodu içerisinde yakalanan event'lerin içerisindeki işlemlerden ibarettir. Asp. Net geliştiricileri de IHttpModule interface'ini implement ederek kendilerine zel HttpModule'leri geliştirebilirler. Şimdi kendimize zel olarak geliştireceğimiz HttpModule'ümüzü yazmaya başlayalım:Kod:using System; using System. Web; using System. Web. Security; /// <summary> /// Summary description for SDCHttpModule /// </summary> public class myHttpModule : IHttpModule { #region CTor public myHttpModule #endregion #region IHttpModule Members public void Dispose public void Init #endregion void context_BeginRequest } IHttpModule interface'i içerisinde implement edilmesi gereken yalnızca 2 method bulunmaktadır. Bunlar "Init" ve "Dispose" methodlarıdır. HttpModule'ünün sonlanması durumunda çalışan Dispose methodu içerisinde ihtiyaç duyduğunuz temizleme işlemlerini ve ya diğer zel işlemlerinizi gerçekleştirebilirsiniz. Init methodu içerisinde ise HttpApplication tipindeki objenizin yakalayacağınız event'lerini tanımlarsınız ve. Net Framework işlem sırasına gre ilgili event'lerinizi tetikler. Biz HttpApplication tipindeki objemizin sadece "BeginRequest" işlemiyle ilgileniyoruz. Çünkü sayfamızı ynlendireceğimiz süreç tam olarak ziyaretçinin sayfayı istediği ve Request'in başladığı süreçtir."context_BeginRequest" methodumuz içerisinde event'imizi tetikleyen HttpApplication tipindeki nesnemize ve nesnemiz üzerinde "Context" zelliğinde taşınan HttpContext tipindeki bir diğer nesnemize erişiyoruz. İşte HttpContext tipindeki bu nesne bizim ynlendirme işlemimizi yapmamıza yardımcı olacan class'tır."URLRewriter" ismindeki class birazdan oluşturacağımız bir class'tır ve bu class'ın üzerinde tanımlanmış olan "RewriteUrl" static methodu da ynlendirme HttpContext nesnemizi kullanarak ynlendirme işlemini yapacak olan methoddur. Şimdi de bu class'ımızı oluşturalım:Kod: using System; using System. Collections; using System. Web; using System. Text. RegularExpressions; /// <summary> /// Summary description for SDCReWriteUrl /// </summary> public class URLRewriter { #region Fields static Regex m_ReWriteFilter = null; static Regex m_UrlMatch = null; static ArrayList m_ReWriteUrls; #endregion #region Ctor public URLRewriter #endregion #region Properties static ArrayList ReWriteUrls { get { if { m_ReWriteUrls = new ArrayList ; m_ReWriteUrls. Add ( new ReWrittenUrl ( "blog" , @" /(\d )/(\d )/(\d )/(\d )\.aspx" , "SunaliDotCom. Web/blog.aspx?id=$5". Replace ) ); } return m_ReWriteUrls; } } #endregion public static void RewriteUrl { string m_NewPath = null; bool m_IsReWritten = ShouldReWrite ; if { string m_QueryString = null; int i = m_NewPath. IndexOf ; if ( i >= 0 ) context. RewritePath ; } } /// <summary> /// Bu URL rewrite edilebilir mi diye kontrol eder. /// </summary> /// <param name="context"></param> /// <param name="path"></param> /// <param name="queryString"></param> /// <param name="newPath"></param> /// <returns></returns> private static bool ShouldReWrite { if ( ReWriteUrls. Count > 0 ) { foreach { m_UrlMatch = new Regex ; if ( IsMatch ) } } newPath = null; return false; } static string Convert { if ( queryString!= null && queryString. StartsWith ) return String. Format ( " " , m_UrlMatch. Replace , queryString ); } static bool IsMatch } Şimdi de m_ReWriteUrls ismindeki ArrayList nesnemize eklerken kullandığımız ReWrittenUrl class'ımızı oluşturalım:Kod: using System; /// <summary> /// Summary description for ReWrittenUrl /// </summary> public class ReWrittenUrl { #region Fields private string m_Name; private string m_Path; private string m_Pattern; #endregion #region Properties public string Path { get } public string Pattern { get } #endregion public ReWrittenUrl } web. config dosyamızı açıp aşağıdaki bilgileri ekleyelim:Kod: <system. web> <httpModules> <add name="myModuleName" type="myHttpModule"/> </httpModules> </system. web> web. config dosyamıza eklediğimiz bilgi içerisindeki "type" zelliği "class, assembly" şeklindedir fakat Asp. Net 2.0'da assembly kullanılma zorunluluğu olmadığından bu şekilde bırakılmıştır. Son olarak da projemize "blog.aspx" isminde bir dosya ekleyelim. Bu dosyanın içeriğine herhangi birşey yazmanıza gerek yok. context_BeginRequest methodu içerisinde yazmış olduğumuz m_Context. Response. Write ; satırı bize çalışmakta olan son dosyanın bilgisini verecek. rneğimizi çalıştırmaya ne dersiniz?Şimdi bir de geçersiz bir adres girelim:http://localhost/SunaliDotCom. Web/2005/11/25/44.aspx adresini sonuna bir adet "C" harfi ekleyerek http://localhost/SunaliDotCom. Web/2005/11/25/44C.aspx şeklinde değiştirdim. Fakat girilen adres bizim Regular Expression bilgimizi match edemediği için Rewrite derçekleştirilemedi ve IIS sayfayı gerçek bir sayfa olarak aradı, sonuç ise bulunamayan bir sayfa. Coşkun SUNALI hack forum https://www.turkhacks.com