« Geri
Yorumlar
Makaleyi Sakla
Arkadaşıma Gönder
Yazdır
Yazar |
: Timur Gündoğdu |
Okunma Sayısı |
: 38786 |
Tarih |
: 28.01.2007 21:46:28 |
Kategori |
: ASP.NET |
Konu |
: URL Rewrite Nasıl Yapılabilir? |
Açıklama |
: 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. |
URL Rewrite Nasıl Yapılabilir?
Ö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ı

Timur Gündoğdu
Yazılım Geliştirici
timurg@aspnedir.com
http://timurg.blogspot.com