Örnek Uygulamayı İndir
URL rewrite yapmak için 1 den fazla yol olduğunu söylemek isterim.Bu yüzden makalenin başlığını "nasıl yapılır" değil "nasıl yapılabilir" olarak değiştirdim. URL Rewrite tekniği kısaca açıklamak gerekirse, sitemize ait URL lerin arama motorları için daha anlamlı ve şık hale getirmek amaçlı bir çalışmadır.Bu makalede IIS 6.0 ve IHttpHandlerFactory Interface'ini kullanarak şık URL ler yapacağız.
www.domain.com/makale.aspx?id=456 ( klasik URL )
www.domain.com/url-rewrite-teknigi-nasil-yapilabilir/456.article ( anlamlı bir url )
1.Uygulama
Uygulama tarafında yapmamız gereken öncelikle .makale uzantısı ile gelecek isteklerin çalıştırılacağı bir Interface'i ( IHttpHandlerFactory ) implemente eden bir kod yazmak. Aşağıdaki class ( www.domain.com/url-rewrite-teknigi-nasil-yapilabilir/456.makale ) URL ine cevap veren kod bloğudur
| public class myHandler : IHttpHandlerFactory { public myHandler() { // // TODO: Add constructor logic here // } #region IHttpHandlerFactory Members public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) { // s1 ve s2 bize / ve . nın string içindeki indexlerini getiriyor. www.domain.com/url-rewrite-teknigi-nasil-yapilabilir/456.article int s1 = context.Request.RawUrl.LastIndexOf("/"); int s2 = context.Request.RawUrl.LastIndexOf("."); // s1 ve s2 indexleri arasında kalan string ifadeyi okuyalım string sID = context.Request.RawUrl.Substring(s1 + 1, s2 - s1 -1); //HttpContext ine ait context Nesnesinin RewritePath metodunu kullanarak context.RewritePath(context.Request.RawUrl + string.Format("?id={0}", sID)); // Asıl işimizi yapacak olan sayfayı, PageParser sınıfının aşağıdaki metodu ile ilgili parametrelerle istiyoruz ve döndürüyoruz. return PageParser.GetCompiledPageInstance("~/default.aspx", pathTranslated, context); } |
Web.config
| <system.web> <httpHandlers> <!-- Tüm request çeşitlerinde eğer path imizin sonunda .article varsa myHandler sınıfı işlet --> <add verb="*" type="myHandler" path="*.article"/> </httpHandlers> ... </system.web> |
2.IIS Ayarları
IIS 6.0 da uygulamanın properties ekranına gelip Configuration tıkladığımızda, karşımıza yeni extension ekleyebileceğimiz bir ekran çıkıyor. Bu ekranda Add diyerek .article extension ını ekleyebiliriz. Tabi executable seçeneğine C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll yazmayı unutmayalım. Çünkü bu extension da, tıpkı aspx gibi çalışacağından, bu uzantıdan gelen istekleri de aspnet_isapi.dll karşılayacak.
Ve işte uygulamamız çalıştı