Yazılım Notları
Bilgi Paylaştıkça Çoğalır...

URL Rewriting Alternatif Bir Çözüm

Google arama sonuçlarında ilk sıralarda çıkmanız için yapmanız gereken birçok iş var. Bunlardan birisi de sayfanızın url sinin temiz olmasını sağlamalısınız. Google internet sitelerinin sayfalarını indekslerken, alfanumerik karakterleri ve .aspx, .cgi, .jsp gibi dosya uzantılarını pek sevmiyor. Bu nedenle sayfalarınızın URL'lerini bu karakterlerden bağımsız ve sayfanızın içeriği ile ilişkili bir dinamik bir şekilde oluşturmanız Google arama sonuçlarında ilk sıralarda çıkmanız için size avantaj sağlayacaktır. Bu yazıda, bu işi ASP.NET ortamında ve Global.asax kullanarak nasıl yapabileceğiniz anlatılacaktır.

Son zamanlarda, özellikle blog sitelerinde göze çarpan bir özellik, URL Rewriting. Bunu da Türkçeye çevirmek çok sıkıntılı bir iş olduğu için orijinal halinde bırakmak belki daha iyidir. Ama ille de Türkçeye çevrilmesi gerekirse, “URL Yeniden Yazma” denilebilir.

               

Peki, nedir bu URL REWRITING ya da “URL Yeniden Yazma”. Şu an bu makaleyi okuduğunuz sayfadaki adres çubuğuna bakarsanız, http://www.yazilimnotlari.com/makale-1058-url-rewriting-alternatif-bir-cozum yazdığını görürsünüz. Neden böyle bir şeye gerek duyulur? Google aramalarında ilk sıralara çıkabilmek için. Yani bu bir SEO(Search Engine Optimization) ya da bunun da Türkçe karşılığı diyebileceğimiz “Arama Motoru Optimizasyonu” çalışmasıdır.

URL yeniden yazma (rewriting) aşağıdaki yollardan birisiyle yapılabilir:

  •      Internet Information Server 7.0 ile

  • Asp.NET RouteData (System.Web.Routing) ile

  • Ya da Global.asax ile yapılabilir.

Bu makalede Global.asax ile URL REWRITING nasıl yapılacağı anlatılacaktır.

Bu kapsamda yapılacak işler şunlardır:

1.      <a> tagli linkleri url rewriting için uyumlu hale getirmemiz gerekmektedir. http://www.yazilimnotlari.com da bu işi yapmak için <a> tagli linkler aşağıdaki hale çevrilmiştir

<a     href="makale-<%# Eval("articleNo") - <%% Eval("IngilizceBaslik") %>;"

        title="<%#TurkceBaslik") ) %>"

        target="_self"

        class="link">

       

<%#"TurkceBaslik") ) %>

</a>

       

Tabi yukarıdaki linkte makale-‘den sonra yer alan <%# Eval("url") %>" kısmı adres çubuğuna aktarılacağı için, bu url kısmında Türkçe karakter bulunmaması gerekmektedir. Bu sağlamak için ise, veri tabanı yönetim sisteminde varchar(max) sonucunu geri çeviren bir fonksiyona ihtiyaç duyulmuştur.

Bu işi yapan fonksiyon ise şudur:

        CREATE FUNCTION [dbo].[IngilizceyeCevir]

        (

                @metin nvarchar(max)

        )

        RETURNS nvarchar(max) AS

        BEGIN

                declare @pos int; select @pos=1

                declare @karakter char;

                declare @uzunluk int; select @uzunluk=LEN(@metin)

                declare @sonuc nvarchar(max); set @sonuc='';

                declare @yeniDeger char;

                

        while @pos<@uzunluk+1

                begin

                        select @karakter=SUBSTRING(LOWER(@metin),@pos,1)


                if
@karakter='' set @yeniDeger='-' else
                
if @karakter=' ' set @yeniDeger='-' else

                if @karakter='ç' set @yeniDeger='c' else        

                if @karakter='ğ' set @yeniDeger='g' else

                if @karakter='ı' set @yeniDeger='i' else

                if @karakter='ö' set @yeniDeger='o' else

                if @karakter='ş' set @yeniDeger='s' else

                if @karakter='ü' set @yeniDeger='u' else

                if @karakter='\' set @yeniDeger='-' else

                if @karakter='/' set @yeniDeger='-' else

                if @karakter='(' set @yeniDeger='-' else        

                if @karakter=')' set @yeniDeger='-' else

                if @karakter='{' set @yeniDeger='-' else

                if @karakter='}' set @yeniDeger='-' else

                if @karakter='%' set @yeniDeger='-' else

                if @karakter='&' set @yeniDeger='-' else

                if @karakter='+' set @yeniDeger='-' else

                if @karakter=',' set @yeniDeger=null else

                if @karakter='?' set @yeniDeger='-' else

                if @karakter='.' set @yeniDeger='-' else        

                if @karakter='''' set @yeniDeger=null else

                if @karakter='"' set @yeniDeger=null else

                

                set @yeniDeger=@karakter

                set @pos=@pos+1;

                if (@yeniDeger is not null)

                                set @sonuc+=@yeniDeger;

                end

            return @sonuc;

    END;


 

 

     

3.     Eğer bu haliyle projemizi çalıştırmayı denersek, sonunda .aspx, .html, .htm gibi IIS’in anlayabileceği bir dosya uzantısına sahip olmayan bir dosya açmasını istemiş oluruz. Bu yüzden, biz web sitemizden bir request te bulunduğumuzda bizim gönderdiğimiz URL’yi IIS’in anlayabileceği bir şekle çevirmemiz gerekmektedir. Bunu ise şu şekilde yapabiliriz:


Projemize eğer yoksa bir Global.asax dosyası ekliyoruz. Daha sonra, web sitesinden yeni bir isteğe başladığımız anda (Application_BeginRequest olayında – istemiş olduğumuz sayfa render edilmeden önce) istekte bulunduğumuz sayfanın URL’ sini alıyoruz.


string
DosyaYolu = Request.RawUrl;

       
Bu URL’nin içinde bizim hangi sayfaya yönleneceğimizi bize belirten keyword’ü arıyoruz (örneğimizde “makale-” dir). Eğer bu keyword varsa, biraz önce aldığımız URL’nin dosya adını alıp,segmentlerine ayrıştırıyoruz. Bu ayrıştırma işlemini yaparken de ‘-‘ karakterini kullanıyoruz.   

       

if (DosyaYolu.IndexOf("/makale-") != -1)

     {

            string[] path = System.IO.Path.GetFileName(DosyaYolu).Split('-');

        try

        {

        // burada biz şunu biliyoruz: path array’ini ('-') karakterine göre

        // split ettiğimizde bu Array’ in sıfırıncı indeksi yani path[0]=makale,

        // birinci indeksi ise path[1]=(- den sonra gelen rakamdır)

        // bu rakam ise, article tablosundaki no alanının karşılığıdır. Ve

        // aşağıdaki şekilde, sayfayı

        // http://www.yazilimnotlari.com/article.aspx?no=1058 sayfasına

        // sayfasına

        // yönlendirmiş

        // oluyoruz.

        Context.RewritePath("~/article.aspx", "", "no=" + path[1], true);

        }

        catch

        {

        // Eğer try bloğu içinde herhangi bir hata ile karşılaşılırsa, mesela
        // Nosu olmayan bir article istenirse buraya düşer.

                Response.Redirect("~/anasayfa");

        }

     }

       

4. Bu şekilde IIS tarafından render edilen sayfa aslında http://www.yazilimnotlari.com/article.aspx?no=1058 oluyor ama kullanıcının gördüğü ve google’ın indekslediği sayfa, .aspx, html, htm, ?, vs. gibi karmaşık ve google gibi arama motorlarının sevmediği karakterlerin bulunmadığı daha temiz, ve okunaklı http://www.yazilimnotlari.com/makale-1058-url-rewriting-alternatif-bir-cozum sayfası oluyor.



 

Banka Hesap Numaralarınızı, IBAN Numaralarınızı bir kere telefonunuza kaydedin. İhtiyaç duyduğunuzda elinizin altında olsun.

Banka Hesaplarım

En Güzel Sözler Uygulaması İçin


En Çok Rating Alanlar
Ana Sayfa       Arama       Valid CSS!