Aradığınız konuyu buradan bulabilirsiniz.
Hoşgeldiniz.Burada arama yapabilirsiniz.
Aramak istediğiniz kelimeyi giriniz...
C# ile ilgili kaynaklar
C# Konuları
SQL ile ilgili kaynaklar
SQL Konuları
ASP.NET ile ilgili kaynaklar
ASP.Net Konuları
Makale Başlığı ASP.NET Url Rewriting işlemi - Isapi.dll kullanarak, hosting problemsiz
1000

Bu makalemizde SEO tekniklerinde can alıcı noktalardan biri olan URL Rewrite işlemine değineceğiz. Genelde URL Rewrite işlemi için birçok seçenek vardır. Birçok sitede Intelligencia.UrlRewriter.dll indirerek bu işlemin yapılacağı anlatılmaktadır. Fakat bu işlem bazı hosting firmalarında sorun yarattığından, biz her hostta framework 2.0 yüklendiğinde gelen aspnet_isapi.dll aracılığıyla işlemimizi yapacağız. Böylece “Url Rewrite yaptım, hostta çalışmıyor” gibi problemlerin de önüne geçmiş olacağız.

Bu işlem için sitemizdeki linkleri kendi algoritmalarımıza göre değiştireceğiz. Ben bu makalede tamamen kendi sitemde kullandığım mantığı anlatacağım. Böylece somut bir örnekle anlaşılmasını daha kolay bir hale getirmiş olacağız. Ben sitemde URL Rewrite yaparken önce makaleId’ si, sonuna makale başlığı, onun sonuna da “–yvz.html” takısını ekliyorum ve böylece adres çubuğuna linki değiştirerek bu şekilde yazdırıyorum. Fakat makale ismini yazdırırken Türkçe karakterleri ve bazı karakterleri düzenlemem gerekiyor ki, adres düzgün olarak yazılsın. Bunun için aşağıdaki classı kullanabilirsiniz. Bu classa parametrelerimizi düzgün olarak verdiğimizde bize url rewrite yaparak geri verecektir.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace SiteLib.ObjectClasses

{

    public class SettingsClass

    {

        public static string LinkOlustur(string makaleId, string makaleBasligi,string queryString)

        {

            string Adres = makaleBasligi.ToLower();

            Adres = Adres.Replace("-", ""); Adres = Adres.Replace(" ", "-");

            Adres = Adres.Replace("ç", "c"); Adres = Adres.Replace("ğ", "g");

            Adres = Adres.Replace("ı", "i"); Adres = Adres.Replace("ö", "o");

            Adres = Adres.Replace("ş", "s"); Adres = Adres.Replace("ü", "u");

            Adres = Adres.Replace("\"", ""); Adres = Adres.Replace("/", "");

            Adres = Adres.Replace("(", ""); Adres = Adres.Replace(")", "");

            Adres = Adres.Replace("{", ""); Adres = Adres.Replace("}", "");

            Adres = Adres.Replace("%", ""); Adres = Adres.Replace("&", "");

            Adres = Adres.Replace("+", ""); Adres = Adres.Replace(",", "");

            Adres = Adres.Replace("?", ""); Adres = Adres.Replace(".", "_");

            Adres = Adres.Replace("ı", "i"); Adres = Adres.Replace("#", "sharp");

            Adres = Adres.Replace("'", "-");

            return makaleId+ "-" + Adres + "-"+queryString+".html";

        }

    }

}

Bu classı kullanarak oluşturduğum link için örnek olarak aşağıdaki kodu inceleyebilirsiniz.

List<Makale> list = m.GetSon5MakaleByOkunma();

makaleLinkim.HRef = SettingsClass.LinkOlustur(list[0].Id.ToString(), list[0].Baslik, "yvz");

Sitemizde hangi sayfalarda, hangi linklerde url rewrite yapacaksak hepsini bu şekilde oluşturmamız gerekiyor. Artık linklerimizi oluşturduk.

Daha sonra ilk işimiz IHttpModule (interface) arayüzünü kullanarak Url adında bir class oluşturmak. Ve bu classın BeginRequest metodu ile UrlRewrite uyguladığımız linklerimizi çözümlemek.

Birinci adımda;web sitenizi yapmak için oluşturduğunuz solutiona bir Class Library projesi ekleyin ve projenizin adını UrlMapping yapın. Daha sonra projemize Url adında bir class ekleyelim ve IHttpModulunu implement edelim. Bu classı aşağıya ekliyorum buradan da kopyalayabilirsiniz.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Web;

using System.Runtime.Remoting.Contexts;

 

namespace UrlMapping

{

    public class Url : IHttpModule

    {

        #region IHttpModule Members

 

        public void Dispose()

        {

 

        }

 

        public void Init(HttpApplication context)

        {

            context.BeginRequest += new EventHandler(context_BeginRequest);

        }

 

        void context_BeginRequest(object sender, EventArgs e)

        {

            string path = HttpContext.Current.Request.RawUrl;

            if (path.Contains("-yvz.html"))

            {

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

                HttpContext.Current.RewritePath("Yaziyorum.aspx", "", "yvz=" + parcalar[0], true);

            }

            else if (path.Contains("-ak.html"))            {

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

                HttpContext.Current.RewritePath("Yaziyorum.aspx", "", "ak=" + parcalar[0], true);

            }

        }

        #endregion

    }

}

Bu metodda kuralımızı belirtiyoruz. Yani hangi linkte nasıl bir ayrışım yapacağına karar veriyoruz. Yani kısaca bahsetmek gerekirse; yukarıda gördüğünüz –yvz ve –ak uzantılarının benim için bir anlamı var. Ben url rewrite yaparken, yani adres çubuğuna yazdıracağım adresi değiştirirken eğer makale görüntülüyorsam makalenin başlığını yazdırıyorum ve sonuna –yvz.html ekliyorum, eğer herhangi bir kategorideki makaleleri görüntülüyorsam sonuna –ak.html ekliyorum ve ayrıştırırken de bunları göz önüne alıyorum. Ve daha sonra adres çubuğundaki adresi alıyorum, “-“ işaretlerine göre bölüyorum. Böylece dizinin ilk elemanından id’ mi alıyorum. Yaziyorum.aspx’e bu id ile gönderdiğimde bana o makaleyi getiriyor.Ve böylece url rewrite edilmiş olan adresimi de çözümlemiş oluyorum.

Classımızı da bu şekilde düzenledikten sonra Web Site Projemize referans olarak ekliyoruz. Ve geldik son işleme. Bu işlem de web.config dosyamızda. Burada birkaç satır işlem yaptıktan sonra işlemimiz bitiyor.

İlk önce <httpModules></httpModules> taglarının arasını aşağıdaki şekilde düzenliyoruz.

<httpModules>

      <add name="MMapping" type="UrlMapping.Url"/>

      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</httpModules>

Daha sonra <system.webServer> tagının hemen altına aşağıdaki satırları ekliyoruz.

<validation validateIntegratedModeConfiguration="false"/>

    <modules runAllManagedModulesForAllRequests="True">

      <remove name="ScriptModule"/>

      <add name="MMapping" type="UrlMapping.Url" preCondition="managedHandler" />

      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

    </modules>

Bu işlemi de yaptıktan sonra yine <system.webServer> içerisinde </modules> tagının hemen altında bulunan <handlers>   ile başlayan tagı buluyoruz. Bu tagı <handlers accessPolicy="Read, Script"> olacak şekilde düzenliyoruz.Ve hemen altına da aşağıdaki satırı ekliyoruz.

<add name="ASPNET2.0" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />

Yani kısaca özetleyecek olursak; ilk önce linklerimizdeki Türkçe karakterleri düzenleyerek url rewrite yapacak olan classımızı oluşturuyoruz ve düzenlemek istediğimiz linkleri bu class aracılığıyla düzenliyoruz. Daha sonra UrlMapping adında bir Class Library ekleyip, bu projeye linklerimizi çözümleyecek olan Url classımızı ekliyoruz ve yukarıda belirttiğim şekilde düzenliyoruz. En son olarak da web.config dosyamızda değişikliklerimizi yapıyoruz. Hepsi bu kadar. Karmaşık gibi görünse de işlem bittiğinde “bu kadar basit mi ya!” diye şaşıracağınız kadar kolay bir işlem Url Rewrite ;)

Kategori ASP.Net
Eklenme Zamanı 17.12.11 02:12:07
Okunma Sayısı 558 kez görüntülenmiş
Bu konuya yapılan yorum sayısı 0 adet yorum eklenmiş
Düşüncelerinizi Yazın Bu yazı hakkında ne düşünüyorsunuz?
Ad - Soyad: 
E-Mail Adres:    
Web Sitesi:
Yorumunuz:  
Paylaş