ASP.net de URL Rewriting

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>
             <!–
##### URL REWRITER CODE START #### –>

             <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>

             <!– ##### URL REWRITER CODE END #### –>
       </
configSections>
</
configuration>

Ve

 

<configuration>
<
system.web>

             <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&amp;ilceid=$3"/>

             <rewrite url="~/tr/il-ve-ilceler/(.+)-ili-nakliye-hizmetleri-(.+).aspx" to="~/tr/index.aspx?tag=$1-ili-nakliye-hizmetleri&amp;ilid=$2"/>

             <rewrite url="~/tr/il-ve-ilceler/(.+)-ilceleri-nakliye-hizmetleri-(.+).aspx" to="~/tr/il-ve-ilceler.aspx?il=$1&amp;secim=ilceleriyaz&amp;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.


 

35 thoughts on “ASP.net de URL Rewriting

  1. öncelikle herkes gibi bende te?ekkür ederim fakat bir sorun var umarym yardymcy olabilirsiniz..

    verdi?iniz proje üzerinden örnek vereyim:
    linke tyklad?ymyzda a?a?ydaki gibi  bir sonuç alyyoruz
    bu link’e tekrar tyklady?ymyzda sanal klasör (urunler) ço?alyyor url yapysyny bozuyor
    tekrar tekrar tykladykça urunler klasoru cogalyyor bunu nasyl yapaca?yz?
  2. ö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

  3. 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..

  4. Merhabalar,

    @Can Su sekilde dene:

    <rewrite url="~/companygroups/(.+)-(.+).html" to="~/default.aspx?p=companygroups&amp;companygroupid=$1" /> 

    @Atakan: sondaki "/" yi kaldir.

    @umt: IIS7 de çalisiyor fakat bir kaç ayari var, daha sonraki postlarda atacagim .

  5. 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&amp;companygroupid=$1" />

    bu sekilde hata aliyorum…

    hatam :

    Hata Özeti

    HTTP Hatasi 404.0 – Not Found

    Aradiginiz kaynak kaldirilmis, adi degistirilmis ya da geçici olarak kullanim disi.

  6. 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

  7. 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.

  8. UMT sen url routing olarak arastir, IIS 7 de asp.net 4.0 kullaniyorsundur, onda urlrewriting degil urlrouting kullaniliyor.

  9. Merhaba bu makalede yazdiginiz sistem IIS 7 ile çalismiyor bu konu hakkinda yardimci olursaniz sevinirim.

    404 hatasi aliyorum…

  10. 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

  11. 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?

  12. 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…

  13. 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?

  14. @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://&quot;
      &

  15. 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

  16. 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?

  17. evet link en alttaymis yeni gordum. Anlattiginiz makaleye gore yaptim calisti. paylasiminiz icin tesekkur ederim

  18. Kodlama sonunda buraya tiklayin yazisina tiklayip projeyi indirin, bin klasörü içerisinde göreceksiniz. Herseyi devletten beklemeyin 😉

  19. hersey iyi güzelde Intelligencia.UrlRewriter.dll yok bin klasorunden demissiniz ama nereden bulacaz onu orda yok

  20. Örnekte görüldügü üzere web.config dosyanizda,

    <rewrite url="~/tr/hizmetlerimiz/" to="~/tr/hizmetler.aspx"/>

    gibi bir yönlendirme yapmalisiniz.
    Tskler.

  21. 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.

  22. oh yeah sabri döktürmüssün adamim süper olmus tasarim ,daha da iyi olacaktir eminim ;))

  23. Siteyi degistirdik.  Yorumlariniz bekleriz. Sira geldi yorum geldiginde mail ile haberdar etmeye.

  24. eline saglik serkan. Sitenin yeni versiyonun yayinladigimda ins bende bu yöntemi ekliyecegim.

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir