Uzun bir aradan sonra tekrar merhabalar.
Bu makalemde size ASP.net ile nasil URL REDIRECTing yapacagimizi anlatmaya çalisacagim. Bu makaleyi bir sekilde Google’den aratip bulmussaniz, .NET için UrlRewriting özelliginin PHPde oldugu gibi built-in bir özellik olmadigini, az çok anlamissinizdir. Eger kendinize ait bir SERVER iniz varsa ISS ayarlariyla oynayarak UrlRewriting özelligini bazi yönlendirmeler ve uzun ugraslar sonunda yapabiliyorsunuz. Ama benim gibi Shared Hosting servisi veren bir firmadan hosting aliyorsaniz, size ISS leriyle oynatmayacaklardir.
Öncelikle sunu belirteyim, Piyasada .NET için URL Rewriting özelligini destekleyen bir firma yok, En son EASYCGI ile konustum, ve onlarda desteklemediklerini söylediler. Piyasada gördügünüz /bu-bir-url-rewriting.aspx gibi .NET le yapilmis siteler ya kendi serverlerine sahiptirler, yada hosting firmasiyla özel anlasmislardir (benim yaptigim gibi). Bu konuda TURHOST.com a tesekkürlerimi bildirmek istiyorum. Destek ekibi mükemmel, her türlü sorununuza aninda çözüm gelistirebiliyorlar. Benim için kendilerinden Intelligencia.UrlRewriter.dll i server’lerine eklemelerini söyledim, müsterilerinin buna .NET platformu için çok ihtiyaci oldugunu anlattim ve sonunda eklediler. Yani asagidaki .dll i bir sekilde gerçek ortama deploy etmek istiyorsaniz ya hosting inizi TURHOSTtan alin, yada biraz sancili bir dönem sizi bekliyor. Reklami hiç sevmedigim halde reklam gibi oldu fakat suanda gerçekleri konusuyoruz.
Peki neden URL rewriting? Neden kendimizi böyle sancili bir kodlamanin içine çekiyoruz? Eger web siteniz için google ve arama motorlari kaçinilmaz dostunuzsa, cevaplar sizi tatmin edecek cinsten.
.
– Bildiginize üzere Google ve MSN gibi arama motorlari haricinde yüzbinlerce arama motoru var ve bunlarin çogu QueryString tabir edilen /arama.aspx?tag=AnahtarKelime “?”dan sonrasini kayitlarina dahil etmemektedirler.
– Google’da sürekli ayni sayfaya dönmeyi çok sevmiyor, /arama.aspx?makale=1 , arama.aspx?makale=2 gibi. Bunun yerine Google’ye takip edebilecegi bir yol sunmamiz lazim, kedinin fareyi kovalamasi gibi, /aramalar/138/fare.aspx /aramalar/234/peynir.aspx burada 138, 234 gibi kelimeler aslinda ID numaralaridir ve muhtemelen, aslinda gidilen sayfa /arama.aspx?makale=138 gibidir. Deneyimlerim Google’nin bu sistemi çok sevdigini gösteriyor, Google Maps ‘e ekledigim 1500 küsür sayfa linkinin 2 hafta içersinde hepsi Indexlendi.
– Çogu zaman kodlamanin güvenlik kismina çok dikkat etmeyiz bu da, kendini Hacker zanneden bizim Lamer tabir ettigimiz çocuklara SQL injection gibi basit uygulamalarla kendilerini tatmin etme sansi verir. UrlRedirecting bizi bu tür saçmaliklardan da koruyabilir çünkü gerçek dosya yollarini tahin etme sanslari kalmaz. Hatta .aspx olan bir dosya uzantisi .html olarak bile gösterebiliriz, yada hiç göstermeyebiliriz! /aramalar/234/ gibi. URL bagimsiz site olusturmanin zevkini çikarin.
– Ben UrlRedirecting’i bir Hosting firmasinda birden fazla site barindirmak için de kullaniyorum, Bir sitemde www.birincisite.com/ikincisite/ de yayinlanan ikinci domainimi www.ikincisite.com olarak gösterebiliyorum. Hosting’e fazla para vermek istemeyen arkadaslar için bir çözüm olabilir. Tabiki bunu yapabilmek içinde her iki domain’e de sahip olmaniz ve ikincisite domaininizi ilgili url ye yönlendirmeniz lazim
Gelelim projemize, karisik gibi görünmesine ragmen size tavsiyem proje dosyalarini indirin ve asagida anlatilanlari proje üzerinde görmeye çalisin, ilk denemenizden sonra ne kadar kolay oldugunu göreceksiniz
Öncelikle projemize Referanslar -> Browse sekmesinden bin klasöründeki Intelligencia.UrlRewriter.dll eklentisini projemize ekliyoruz.
Daha sonra Web.Config dosyamiza asagida görüldügü sekilde;
<configuration> <configSections> <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/> <!– ##### URL REWRITER CODE END #### –> Ve
<configuration> <httpModules>
<!– ##### URL REWRITER CODE START #### –> <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/> <!– ##### URL REWRITER CODE END #### –> </httpModules> </system.web> </configuration>
Kodlarini ekleyerek (kod parçaciklarinin araliklarina dikkat ediniz) Rewriting DLL imizin konfigürasyonlarini tanitmis oluyoruz. Isin en zevkli yani yine Web.Config dosyasinda artik URL lerle istedigimiz gibi oynayabiliyoruz. <configuration>
<!– #################### URL REWRITER CODE START ##################################### –> <rewriter> <!– OUTBOUND LINK TO ACTUAL DOMAIN CHECK START –> <!– Bu kisimda sitemize herhangi bir yanlis link ile gelinmisse, redirect yapmak istedigimiz linki giriyoruz –>
<redirect url="~/tr/index.html" to="~/tr/index.aspx"/> <redirect url="~/tr/index-1.html" to="~/tr/index.aspx"/> <redirect url="~/tr/index-2.html" to="~/tr/index.aspx"/> <redirect url="~/on/tr/(.+)" to="~/tr/$1"/> <!– OUTBOUND LINK TO ACTUAL DOMAIN CHECK END –> <rewrite url="~/tr/hizmetlerimiz/(.+).aspx" to="~/tr/index.aspx?tag=$1"/> <rewrite url="~/tr/hizmetlerimiz/" to="~/tr/hizmetler.aspx"/> <rewrite url="~/tr/il-ve-ilceler/(.+)-ili-(.+)-ilcesi-nakliye-hizmetleri-(.+).aspx" to="~/tr/index.aspx?tag=$1-ili-$2-ilcesi-nakliye-hizmetleri&ilceid=$3"/> <rewrite url="~/tr/il-ve-ilceler/(.+)-ili-nakliye-hizmetleri-(.+).aspx" to="~/tr/index.aspx?tag=$1-ili-nakliye-hizmetleri&ilid=$2"/> <rewrite url="~/tr/il-ve-ilceler/(.+)-ilceleri-nakliye-hizmetleri-(.+).aspx" to="~/tr/il-ve-ilceler.aspx?il=$1&secim=ilceleriyaz&id=$2"/> <rewrite url="~/tr/il-ve-ilceler/" to="~/tr/il-ve-ilceler.aspx"/> <!– TEST –> <rewrite url="~/tr/Products/(.+)" to="~/tr/index.aspx?tag=$1"/>
</rewriter> <!– #################### URL REWRITER CODE END ##################################### –> </configuration>
|
Burada dikkat edilmesi gereken nokta ne kadar (.+) koyarsaniz sirasiyla yönlendirmek istediginiz url de $1, $2, $3 gibi siralama yapmaniz gerekir.
That’s it. Güzel URL ler gelistirmeniz dilegiyle.
Proje Dosyasini indirmek için BURAYA tiklayin
Serkan Bal
Bilg. Müh.
iis 8 ile ilgili bilgim yok, çözümü bulursaniz burada paylasin herkes ögrensin
Tamam da, IIS 8-de çalismiyor bu. Web.config hatasi veriyor. Onu napicaz ?
öncelikle herkes gibi bende te?ekkür ederim fakat bir sorun var umarym yardymcy olabilirsiniz..
öncelikle makaleniz için tesekkürler
biz bu sistemi yaptik ama sonunu html yapamadik yine aspx olarak geliyor.
~/(.+)-(.+)-(.+).aspx kisminda uzantiyi html olarak yaptigimizda hata veriyor.
yardimci olursaniz memnun olurum
web.config belli kisimlarin alintisi
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Cul
Merhaba,
Öncelikle paylasim için çok tesekkür ederim. Dediginiz gibi yaptim, ancak hostinge yükleyince url rewriting yaptigim sayfalar açilmiyor. Siteme destegi Turhost üzerinden aliyorum ve kendilerine Intelligencia.UrlRewriter dll’ini server’a yüklemeleri gerektigini söyledim. Ancak dll’in hangi klasöre yüklenmesi gerektigini sordular bu sefer. Hosting sirketi bu dll’i hangi klasöre yüklemelidir? Yardimlarinizi rica ederim..
Merhabalar,
@Can Su sekilde dene:
<rewrite url="~/companygroups/(.+)-(.+).html" to="~/default.aspx?p=companygroups&companygroupid=$1" />
@Atakan: sondaki "/" yi kaldir.
@umt: IIS7 de çalisiyor fakat bir kaç ayari var, daha sonraki postlarda atacagim .
Merhaba Güzel bir makale olmus ancak. bir sorunum var.
linkim bu:
http://localhost/deneme/companygroups/1-ambalaj-_-kagit.html
webconfigde yazmis oldugum rule asagida…
<rewrite url="~/companygroups/(.+).html" to="~/default.aspx?p=companygroups&companygroupid=$1" />
bu sekilde hata aliyorum…
hatam :
anlatimin için çok tsk ederim kardesim benim buna benzer bir sorunum var kusura bakmayin yazmam gereken basligi bilöedigimden buraya yaziyorum..
kullandigim sunucu win 2005 ve asp tabanli bir script kurdum çok güzel çalisiyor ve buna video bölümü olarakda subdomain açtim ve php tabanli video script kurdum. basarili bir sekilde yüklendi ancak script seo ile birlikte yazilmis ve windows sunucu .htaccess dosyasini okumuyor bu yüzden seo çalismiyor ve linklerin hepsi ölü durumda..
linux a geçis yapsam asp çalismayacak..
seo yu win 2005 de çalistirma gibi biseyler okuduma ama anlamadim yardimci olurmusunuz lütfen :/
linkleri ölü video script:: http://www.video.baknediyorum.com
Üstad çok tesekkürler birtürlü basaramamistim sayende hallettim 🙂
Kardes bene dediklerini Aynen yapti hatt koyaladim yapistirdim ama u seferde Assagidaki hatayi Aliyorum
‘/marketing%20telnet/Default.aspx/’ yolu eslestirilemedi.
Açiklama: Geçerli web istegi yürütülürken islenmemis özel durum olustu. Lütfen hata ve kod içinde kaynaklandigi yer hakkinda daha fazla bilgi almak için yigin izlemesini gözden geçirin.
Özel Durum Ayrintilari: System.InvalidOperationException: ‘/marketing%20telnet/Default.aspx/’ yolu eslestirilemedi.
UMT sen url routing olarak arastir, IIS 7 de asp.net 4.0 kullaniyorsundur, onda urlrewriting degil urlrouting kullaniliyor.
Merhaba bu makalede yazdiginiz sistem IIS 7 ile çalismiyor bu konu hakkinda yardimci olursaniz sevinirim.
404 hatasi aliyorum…
Hocam sa
ayni söyledigin gibi hosting firmasiyla sancili bir dönem yasiyorum. Sorun sende yada hosting de bile demiyolar hafta sonuna denk geldiginden dolayi elaman yok diyolar 2 gündür salliyolar bende yarin ilk isim turhost geçmek olacak. Aslinda bu tarz seyleri reklam olarak düsünmemek gerek bence. Çünkü isleri uzun bir zaman aksatiyolar. Hangisi iyi ise bunlarida paylasmak bence daha iyi olur.
hersey için tesekkürler
linki tekrardan kontrol edebilirmisiniz
Dosyayi birdaha yükleyebilirmisiniz arkadaslar
Merhaba arkadaslar,
bu sistemi uyguluyorum hersey çok güzel ancak, kategorili sayfaya girdigimde sayfalama isleminde sorun yasiyorum. mesela /savas-oyunlari.html sayfasinda en altta datapager ile yaptigim sayfalamada tikladigimda 2.sayfaya önce yukarida url kategori.aspx?katseo=….. sekline dönüsüyor ama sayfa degismiyor, tekrar tikladigimda ise 2.sayfaya gidiyor… Bu sorunu nasil asarim yardimci olabilirmiisiniz?
Sorunu çözdüm,
ancak bu sefer hasan arkadasimizin sorunu ile karsikarsiyayim. ancak ben c# yaziyorum. style dosyasini url olarak yazsam hostta sorun çözülüyor ama localde problem yasiyorum. yardimci olabilirmisiniz…
Merhaba,
Öncelikle makalen için tesekkürler emek verip paylasmissin. Yalniz söyle bir sorunum var, web.config dosyami tamamen silip senin yazdiklarini yazinca çalisiyor, ancak orjinal web.config dosyama ek yapinca hata aliyorum..
Özel Durum Ayrintilari: System.NullReferenceException: Nesne basvurusu bir nesnenin örnegine ayarlanmadi.
[NullReferenceException: Nesne basvurusu bir nesnenin örnegine ayarlanmadi.]
Intelligencia.UrlRewriter.Configuration.RewriterConfiguration.Load() +96
Intelligencia.UrlRewriter.Configuration.RewriterConfiguration.get_Current() +169
Intelligencia.UrlRewriter.RewriterHttpModule..cctor() +47
[TypeInitializationException: ‘Intelligencia.UrlRewriter.RewriterHttpModule’ tür baslaticisi özel durum döndürdü.]
Sebebi ne olabilir? ve ne yapabilirim?
@Hasan su sekilde dene;
Dim BasePath
Sub PathYaz()
Dim Port = Request.ServerVariables("SERVER_PORT")
If Port = "" Or Port = "80" Or Port = "443" Then
Port = ""
Else
Port = ":" + Port
End If
Dim Protocol = Request.ServerVariables("SERVER_PORT_SECURE")
If Protocol = "" Or Protocol = "0" Then
Protocol = "http://"
&
Hocam simdi bunu deniyorum ama söyle bir sorun çikiyor.mesela 2 degisken var , 4 ve 1 degerleri
4/1/kategori/kitap/Bilgisayar/ simdi bu klasör fiziksel olarak olmadigindan sistem bulunamadi diyor.Linke tikladigimda ilgili sayfaya gidiyor ama sayfadaki reismleri ve css style’ leri göstermiyor .asagidaki gibi izinleride veriyorum ama bunu nasil yapacagiz.IIS 7 kullaniyorum ve Vista,IIS 7 zor oluyor kullanmasi,yardimci olursaniz sevinirim.
<
location path="4/1/kategori/kitap/Bilgisayar
cevabin için tesekkür ederim. senin söyledigin ilkin aklima geldi fakat çok külfetli olur su noktada.
bi siteyi çevirmeye çalisiyorum fakat resimleri düzenlemek çok zor olur. bunun bi kisayolu filan yokmudur acaba?
Merhaba, resim yollarini ../kalsoradi/resimadi.jpg veya ~/kalsoradi/resimadi.jpg seklindemi gosteriyorsunuz ?
Eger boyle yapiyorsaniz bu resim yollarini http://www.siteadi.com/klasoradi/resimadi.jpg seklinde yazin.
Bu sekilde yazdiginizda klasöru bulamama ihtimali yok.
arkadasim bu konuyu bu basitlikte anlattigin için tesekkür ederim. fakat yaptigimizda klasör gibi gördügü için site tasarimindaki resimleri o klasörde ariyor. bulamadigi içinde göstermiyor.
http://localhost:54514/Son/Haber/171.html sayfasi
http://localhost:54514/Son/default.aspx?id=171 gidiyor
resimler Son/images klasörünün içersinde oldugu için bulamiyor. bu sorunu nasil çözebiliriz yardimci olursaniz sevirim.
evet link en alttaymis yeni gordum. Anlattiginiz makaleye gore yaptim calisti. paylasiminiz icin tesekkur ederim
Kodlama sonunda buraya tiklayin yazisina tiklayip projeyi indirin, bin klasörü içerisinde göreceksiniz. Herseyi devletten beklemeyin 😉
hersey iyi güzelde Intelligencia.UrlRewriter.dll yok bin klasorunden demissiniz ama nereden bulacaz onu orda yok
Örnekte görüldügü üzere web.config dosyanizda,
<rewrite url="~/tr/hizmetlerimiz/" to="~/tr/hizmetler.aspx"/>
gibi bir yönlendirme yapmalisiniz.
Tskler.
merhabalar,
sonuna .aspx koymaz isem çalismiyor. yani /urunler/ diyince yönlenmiyor fakat /urunler.aspx diyince oluyor. fakat ben aspx veya html yazilmasini istemiyorum. Tesekkürler.
Tesekkür ederim kardes. Görüslerinizi beklerim.
oh yeah sabri döktürmüssün adamim süper olmus tasarim ,daha da iyi olacaktir eminim ;))
Siteyi degistirdik. Yorumlariniz bekleriz. Sira geldi yorum geldiginde mail ile haberdar etmeye.
anytime boss 🙂
oh yeah,serkan kendine has uslubuyla bir makale yazmis;)
thnx dude
Reja Sabricim, takildigin yer olursa sor 🙂
eline saglik serkan. Sitenin yeni versiyonun yayinladigimda ins bende bu yöntemi ekliyecegim.