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.





Yararlı ve açıklayıcı bir anlatım. Paylaşım için teşekkürler.
Gerek burada, gerek kendi dökümanlarında söylenen her şeyi yaptım fakat web.config hatasını geçemedim
Parser Error Message: Could not load file or assembly ‘UrlRewritingNet.UrlRewriter’ or one of its dependencies. The system cannot find the file specified.
Server’daki bin klasöründe gerekli DLLler var. web.config’de de gerekli ayarlar yapıldı ama bu hatanın sebebini çözemedim…
Ha bu arada, sizin verdiğiniz örnek projede de aynı hatayı alıyorum. Cevabınızı merakla bekliyorum… Teşekkürler…
Merhaba;
Acaba projenizi bir sanal dizinde çalıştırdığınızdan emin misiniz?Yani Bin klasörü,Web.config ve proje root dizininde olmalı.Aldığınız hataya göre sizinde anlamış olduğunuz gibi gerekli kütüphane bulunamıyor.Şu anda web de bu örneğin çalışna bir başka örneği mevcuttur.Sanırım gözünüzden kaçan eksik bir nokta var.Dediğim gibi sanal dizin olarak mı çalıştırıyorsunuz?
Yok hata bende belli de… Çok saçma bir hata alıyorum yaa. Sanal dizinden kastınız, 3ünün de aynı rootta olması ise evet, sanal dizinde. Bin klasörü, Web.config ve proje root dizininde…
hatayı bu adreste görebilirsiniz:
http://vanim.net/YerelHaberler.aspx
http://www.aspdotnetfaq.com/Faq/how-to-disable-web-config-inheritance-for-child-applications-in-subfolders-in-asp-net.aspx
Bu linkde ki anlatılanları bir deneyin lütfen.
Her iki makalenizi de gerçekleştirdim gerçekten çok faydalılar, bunun için teşekkur ederim. Ancak diğer makalenizde de söylediğim mesele burda da var o da şu ki :
bu işlemler ile post back sonucu url adresinin eski haline geri dönmesi önlenmiş oluyor bu doğru. Ancak url’sini değiştirdiğimiz formumuzda diyelim ki buton var ve butona tıklandığında label’e bişeyler yazdırsın. Butona tıklanınca post back oluyor ve post back olmasına rağmen url adresi bizim istediğimiz şekilde geliyor ancak label’a hiç bir şey olmuyor yani sayfayı ilk açtığımız hali bizim karşımıza çıkıyor. Ben butona tıkladıgımda butonumunda işlev yapmasını yani sadece aaa bak buton ile sayfayı post back yaptırdım bak url’inimde benm istediğim gibi geldi şeklinde değil de butonumun işlevini de yaparak yani mesela label’a bişiler yazdırıp istediğim url’in de gelmesini istiyorum, asıl bunun çözümü nedir ?
İlgilenen ve yardımcı olabilecek tüm arkadaşlara şimdiden teşekkürler…
Bilmem sorunumu anlatabildin mi ?
kusura bakmayın bu yöntem gerçekten işe yaradı, sayenizde projemi tamamladım, gerçekten çok teşekkürler
Projenizi tamamladığınız için adınıza sevindim fatih bey.Kolay gelsin
hocam hostta böyle bi hata alıyorum.yardımlarınız bekliyorum
hocam hostta webconfig de script module hatası verdi.Yardımların için teşekkürler.
Merhaba;
Sanırım web.config de url kurallarınızda bir hata yaptınız.Kaynak kodları indirip inceleyebilirsiniz.Eğer sorunu bulamaz iseniz site adresinizi bana mail atınız hataya birde oradan bakalım.
Makale güzel olmuş,teşekkürler.
Arkadaşlar projelerinizin bin klasöründe System.Web.Extensions.dll ve UrlRewritingNet.UrlRewriter.dll
dosyalarının olmasına dikkat edin . Hatalar bu dosyaların eksik olmasından çıkıyor olabilir . Bu dosyalar yoksa referans ekleden ekleyebilirsiniz veya direk dosyaları bin klasörüne kopyalayabilirsiniz.
Arkadasım guzel calısma , fakat birsey sormak istiyorum .. Ben bu uygulamayı calıstırdım , ilk once sıkıntı yoktu , ama sanırım sonra iş biraz değişti..
Haber ‘ in detayına gittigim sayfadan , anasayfaya dönen linkin yolu (/2009/08/04/3/)default.aspx seklinde cıkıyor , parantez icine aldıgım kısım neden geliyor anlamadım !.. diğer enteresan sey ise , haber detay sayfasında gridview ‘ e cektiğim habere ait haber resımleri de gelmıyor .. Görünmeyen resim ‘ in özelliklerine bakıyorum ve yine /2009/08/04/3/Utils/HandlerPhoto.ashx?PictureID=101
şeklinde Path’i değiştiği için görüntüleyemiyor..
Olması gereken url : Utils/HandlerPhoto.ashx?PictureID=101
WebConfig , Class ve diğer herseyi tam yaptıgımdan emın olduktan sonra atıyorum bu comment ‘ i ..
Saat sabahın 5 ‘ ini geçiyor yapamadım merakla en kısa zamanda yardımınızı beklıyorum..
Tşkr Ederim..
Dostum , projemi yetistirmem lazım hızlı bir cevap olursa sevinirim
Geçtiğimiz hafta tatilde olduğuym için biraz geç cevap yazdım.Kusura bakmayın.
Resimlerde ki sorunu src etiketine / ifadesini ekleyerek önleyebilirsiniz.Örneğin;
img src=”/images/test.jpg”
Böylece resmin root dizininde aranacağını belirtmiş oluyoruz.
Linklerimizin 2008/07/08 gibi çıkması gayet normal bir şey.Zaten onun için uğraşıyoruz.Dolayısı ile root dizinindeki bir sayfaya gitmek için yine / karakterini kullanmalıyız.Örneğin;
a href=”/default.aspx”
Kolay gelsin
cvp biraz gec geldı evet
ben o arada işi öğrendim , ama yinede sagol ..
simdi sorunsuz bir sekilde kullanıyorum ..
Teşekkürler , Kolay gelsin
SeLam ,
Benim bir sorum daha olacaktı ..
Rewrite local ‘ de sorunsuz çalısırken , web ‘ de nedense çalışmıyor ..
Url olması gerektiği gibi fakat sayfayı bulamıyor ..
Acil yardımına ihtiyacım var .
Teşekkür ederim ..
Dostum Çok aciliyeti var , bir yardımcı olsan çok güzel olur.. Aksam siteyi web ‘ e atmam gerekiyor ..
Merhaba;
Web.config de ki url kurallarınızı kontrol edin.Ayrıca sayfalarınızın uzantısı sadece aspx olabilir.Eğer farklı bir uzantıda url rewrite yapmaya çalışıyorsanız sayfayı görüntüleyemezsiniz.Başka bir sorun olmaması lazım.Olmaz ise tekrar yazın bana.Kolay gelsin
sayfa uzantısı .aspx .. Ayrıca Web.config de ki url kurallarım aynı sizin yaptıgınız gibi .. Örnek projenizi indirdim , web config ‘ imle karsılastırdım , local de sorunsuzken serverda bulamıyor.. Hala anlamıs değilim ..
sorunun aciliyeti var.. yardımın için teşekkür ederim
Web adresinizi bana mail atabilirmisiniz?
info{@}ugurvolkan.com
Dostum ilgin icin saol , problem çözüldü ..
En az dört gündür bu yüzden tırmalıyordum .. Host sağlayıcısına problem sizde dememe rağmen kabul etmıyorlardı .. En son bugun iyi baskı kurunca , ne yaptılarsa artık , sorun çözüldü ..
Herkes işini eksiksiz ve başından sağmadan yapsa ne güzel olurdu..
Yardımların için tşkr ederim .. Iyı çalışmalar
arkadaşlar artık kafayı yemek üzereyim. ne kadar zormuş bu rewriting olayı ya.. herşey tamam. takılıyo bi yerlede. bi yardımcı olursanız çok sevinirim… Normalde tek id gönderdiğimde problem olmuyor. işin içine 2-3-4 id girdiğinde problem oluyor. şöyle;
sayfadaki link
Response.Redirect(extools.ReWriterPath((HaberId.ToString())+”_1″, ViewState["strhaberBaslik"].ToString(), “2″)); //bu verdiğim link
webconfig
Conversion failed when converting the nvarchar value ‘176_1′ to data type int.
Açıklama: Geçerli web isteği yürütülürken işlenmemiş özel durum oluştu. Lütfen hata ve kod içinde kaynaklandığı yer hakkında daha fazla bilgi almak için yığın izlemesini gözden geçirin.
Özel Durum Ayrıntıları: System.Data.SqlClient.SqlException: Conversion failed when converting the nvarchar value ‘176_1′ to data type int.
Kaynak Hatası:
Geçerli web isteği yürütülürken işlenmeyen bir özel durum üretildi. Özel durumun kaynağı ve konumuna ilişkin bilgiler aşağıdaki özel durum yığını izlemesi kullanılarak belirlenebilir.
ama bu hatayı alıyorum. int çevirmeye çalışıyor. yardımcı olursanız çok sevinirim. teşekkürler…
web config ayarlarını yazmayı unutmuşum:
Örnek proje çalışmıyor..
Evet makale harika tam istediğim yazıydı bu.
Teşekkür ederim..
Bendeki sorunda hosta çalışıyor lokalde çalışmıyor. bu yüzden de çalışamıyorum
nedeni ne olabilir.
Örnek Proje Çalışıyor Yağız Bey;Hata pc nizde olmalı.Bi kontrol edelim lütfen
Proje host ta çalışıyor localde çalışmıyor ise;localde sanal dizin oluşturduğunuzdan emin olun.Gerekli olan dll dosyalarımızın ilgili yerlerde olduğunu kontrol edelim.
Güzel bir makale çalışması teşekkürler emeğinize sağlık
Merhaba,
anlatım için teşekkürler. Ben repeater kullanıyorum içerisindede bu uygulamayla ürünlere linkler verip, detay için urundetay.aspx sayfasına yönlendirmek istiyorum. Peki ben bu süreçte ürün detaylarını getirtmek için querystring’e ihtiyaç duyucam. Url rewrite’ten urundetay sayfasındaki datalist urunID yi nasıl querystring olarak çekicek?
Yardımcı olursan sevinirim, iyi çalışmalar.
Yazımda behasettiğim gibi querystring içeren linklerinizi oluşturduktan sonra;diğer sayfanızdan yine klasik bir şekilde id lerinize ulaşabilirsiniz.Yani;
Request.QueryString.Get(”ID”); gibi.
Öncelikle çok teşekkür ederim. Gerçekten çok faydalı bir makale olmuş.
Bende bazı arkadaşlarda oluşan serverda 404 Not Found hatası ile karşılaştım.
Localde sorunsuz çalışıyor fakat serverda 404 hatası alıyordum.
Sonra,
http://www.urlrewriting.net/160/en/documentation.html
Bu sayfadaki dökümantasyonda yazdığı gibi serverda iis6 için extension ayarının yapılması gerektiğini öğrendim.
12. Sayfada bunlar yazıyor.
IIS 6.0
Server içerisinde Başlat > çalıştır > inetmgr yazıp enter basın.
IIs manager açılacaktır. Sol tarafran Web Sites altında kendi sitenizi bulup siteniz üzerinde sağ tuş yapın. ve Properties e tıklayın.
Karşınıza gelen ekranda bulunan Home Directory tabından Application Settings altındaki Configuration butonuna tıklayın.
Karşımıza direk mapping tabı açık gelecektir.
Burada yapmamız gereken iki işlem var.
1. Applications Extesions > Add diyoruz.
Her bir bölüme karşısındaki değeri girelim.
Executable : c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
Extension : .html
Verb bölümünden Limit to : GET,HEAD,POST,DEBUG
Script Engine : İşaretleyin
Verify that file exist : boş bırakın.
2. Wilcard application maps > insert diyelim.
Executable : c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
Verify that file exist : boş bırakın.
Bundan sonra siteniz prod ortamında çalışacaktır.
Örnek site : http://www.fontailesi.com
Galip Güçüoğlu
Merhabalar,
elinize sağlık öncelikle kestirmeden böyle karışık bir işin nasıl yapılacağını göstermişsiniz. Yanlız projemde bir türlü kullanamadım , sizin yaptığınız örnek uygulamadaki bulunan web.config dosyasındaki aynı ayarları yapmam ragmen yinede web.config için “Tanınmayan yapılandırma bölümü: urlrewritingnet.” hatası alıyorum dll ler herşey yerli yerinde bin klasörünün içinde . tşk.
Merhaba;
Web.Config dosyanızda url rewrite ile ilgili kuralları ilgili taglar arasına yerleştirdiğinizden emin misiniz?
Ayrıca örnek projeyi indirip denediniz mi?
Merhaba;
evet örnek projeyi indirip siz ilgili kodları nereye koymussanız ben de aynı taglar arasında yerleştirdim sıralaması bile aynı ama yinede yukardaki mesajımda belirttiğim hatayı alıyorum.
Yardım edebilirseniz çok sevinirim
Siz projenizi herhangi bir sunucuda yayınlayın.Sonra adresi bana verin bi kontrol edelim.Kolay gelsin
selam;
herşey sizin yaptıgınız gibi yapınca ok bir sıkıntı yok. yanlız benim default sayfamda sıralanan birden fazla ürün var ve bunları repeater içinde evallerle çekiyorum şöyle;
paylaşımınız için teşekkürler.bir arkadaş da sormuş ama ben yapamıyorum
tırnak isaretlerini kullanmadım anlarsınız sanırım…
asp:Repeater ID=”Repeater1″ runat=”server”
ItemTemplate
a href=’ %=extools.ReWriterPath(”",”DetayUrl”,”3″) %’
%#Eval(”Baslik”) % /a
br
%# Eval(”Tarih”) %
%# Eval(”Icerik”) %
/ItemTemplate
/asp:Repeater
siz demişssiniz ki querystringle halledersiniz. ama…
using (SqlConnection con = new SqlConnection(connection))
{
using (SqlCommand com = new SqlCommand(”select * from bidibidi”, con))
{
com.CommandType = System.Data.CommandType.StoredProcedure;
con.Open();
SqlDataReader dr = com.ExecuteReader();
dr.Read();
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
}
şu şekilde ben id’yi nasıl veririm? projeyi yetiştirmem lazım cevap verirseniz çok mutlu olurum…iyi çalışmalar
tamam ayarladım k.bakmayın tesekkürler:)
maalesef çözdüğümü sanmıştım ama şu şekil yazınca;
a href=’%=extools.ReWriterPath((Eval(”IcerikID”).ToString()),”DetayUrl”,”3″) %’
%# Eval(”Baslik”) %> /a
Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.
selam ben paylaşımınız için teşekkür ediyorum.herşey dört dörtlük…projeme ekledim birkaç sorun kalmıştı onları da hallettim.Ama o da ne? yorumlar.aspx adında bir sayfam var ve o sayfaya gittiğimde, sayfa normalde en aşağıdaki buttona focus’lanıyordu.fakat bu urlrewrite işin içine girdikten sonra focus’lanmamaya başladı.Bunun nedenini bilen var mı???
merhaba ….
paylasımınız için tesekkurler.ben projeme ekledim ve kullanıyorum.yalnız bir yerde bir forumda okumuştum. script manager lar falan çalışmaz diorlardı.benim sitemde de ajax ve script manager var,fakat sorunsuz çalışıyor:) buraya kadar bir sorun yok.
yalnız benim sorunum ;
bir adet yorumlar.aspx adında sayfam var ve yorumlara tıklanınca sayfadaki buttona focuslanmasını istiyorum.url rewrite tan önce sayfam oraya focuslanıyordu,fakat şimdi focuslanmıyor:( acaba scriptmanager mı engel oluyordur çözemedim.yardımlarınızı bekliyorum arkadaslar…tesekkürler