Murat Tüfekçi

Asp.Net , Url Rewriting ve UrlRewritingNet.UrlRewriteSubscribe Subscribe

  • Murat Tüfekçi
  • February 13th, 2008

Günümüzde arama motorlarında üst sıralarda olmak çok büyük önem taşımaya başladı. Her websitesi sahibinin ilk aradığı koşulun Google,Yahoo,Live Search gibi arama motorlarında üst sıralarda olmak olduğunu görmekteyiz. Bu bağlamda site sahiplerinin (ya da geliştiricilerinin) bazı kurallara ve ince noktalara dikkat etmeleri gerekmektedir. Bir web sayfasının arama motorlarında üst sıralarda çıkmanın, elimizde olan ya da elimizde olmayan gereksinimlerden kaynaklığından bir garantisi yoktur. Ama belirlenmiş kurallar olduğuda açıktır. Bu yüzden elimizden geldiğince bu kurallara uyarsak arama motorları sonuçlarında daha üst sıralarda kendimize yerler bulabiliriz. Öyleyse, ne yapmak gerekir derseniz bu başlı başlına bir olay olduğundan hepsinden bahsedemicem ama en önemli koşullardan biri üstünde yoğunlaşıcam. Önemli olan bu gereksinimde aranan kelime ya da kelime grubunun sayfa adresinde geçip geçmediğidir.

Asp.Net teknolojisi bize kendi içinde sanal adresler yaratıp alt tarafta başka bir sayfanın yaptığı işlemi yaptırmamıza olanak sağlar. Bunu kendi yaptığımız httpmodule dediğimiz özel bir bileşenler sayesinde yapmak mumkun olduğu gibi geliştirilmiş hazır modüllerde kullanmak zaten kısıtlı olan zamanımızı korumamızı sağlar. Benim burda bahsedeceğimde bu tür hazır bir modül olan UrlRewritingNet.UrlRewrite modulu.

Kullanması çok kolay bu modül, performans bakımından da gayet tatmin edici sonuçlar vermekte. Gel gelelim esas işin nasıl yapılacağına ilk önce modulle gelen dll dosyasını bin klasorune kopyamanız gerekiyor sonrasındada aşağıdaki satırları web.config dosyanıza eklemelisiniz ;

<httpModules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
</httpModules>

Eger Http modul tagı zaten var ise httpmodules tagları arasına <add name=”UrlRewriteModule” type=”UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter”/> eklemeniz yeterli. Diğer türlü br web.config içinde birden çok <httpModules> tag ı hata verecektir.

İkinci işlem ise urlwrite kurallarının yazılması. Kurallar <configuration> tag ının içine yazılmalıdır :

<?xml version="1.0"?>
<configuration>
<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage="default.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
<rewrites>
<add name="RewriteOnDomain" virtualUrl="^http\://(.*)/SampleWeb/domain/(.*)/Detail(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx?language=$3&id=$4;&domain=$1" rewrite="Domain" ignoreCase="true"/>
<add name="OtelDetalRewrite" virtualUrl="^~/Otel_(.*)_(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/OtelDetay.aspx?$2" ignoreCase="true"/>
<add name="TurDetalRewrite" virtualUrl="^~/Tur_(.*)_(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/TurDetay.aspx?TurID=$2" ignoreCase="true"/>
<add name="Iletisim2PathRewrite" virtualUrl="^~/(.*)/(.*)/Iletisim.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Iletisim.aspx" ignoreCase="true"/>
<add name="Iletisim1PathRewrite" virtualUrl="^~/(.*)/Iletisim.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Iletisim.aspx" ignoreCase="true"/>
<add name="RedirectInApplication" virtualUrl="^~/(.*)/Default.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Default.aspx" redirect="Application" redirectMode="Permanent" ignoreCase="true"/>
<add name="KickBrowserToDomain" virtualUrl="^http\://(.*)/SampleWeb/kickto/(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="http://$2?source=$1" redirect="Domain" redirectMode="Permanent" ignoreCase="true"/>
</rewrites>
</urlrewritingnet>

...... </configuration>
Yukarida görüldüğü gibi bir kaç örnek kural da mevcut. Gelelim bu kurallar hakkında bir kaç açıklamaya :
<add name="OtelDetalRewrite" virtualUrl="^~/Otel_(.*)_(.*).aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/OtelDetay.aspx?$2" ignoreCase="true"/>

bu örnekte (.*) yazan yerlere denk gelen değerler $index şeklinde sıralanıyorlar. Gördüğünüz gibi (^~/Otel_(.*)_(.*).aspx) ^~/Otel_1_25.aspx şeklinde bir adres istenirse bu adres arka tarafta (~/OtelDetay.aspx?$2) ~/OtelDetay.aspx?25 sayfasını çağıracaktır.

<add name="Iletisim1PathRewrite" virtualUrl="^~/(.*)/Iletisim.aspx" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/Iletisim.aspx" ignoreCase="true"/>

Bu kuraldada eğer herhangi bir alt klasörden iletisim.aspx istenirse application root ta iletisim.aspx in çağıralacağını belitmekteyiz.

Bazı Uyarılar;

- Sanal klasorlerle çalışırken resimlerinizin, stylesheet lerin, javascript dosyalarınızın vb. yollarına dikkat edin.
- ASP.NET Isapi tarafından ele alınmayan dosyalar için (xml,html vb.) iis de bütün istekleri asp.net isapi ele alacak şekilde değiştirmek gerekebilir.

- Asp.Net AJAX (ATLAS) çalışmayabiliyor çözümünü henüz bulamadım bulunca direk yazacağım zaten. Google grubundan sordum fakat yanıt alamadım. Aslında sorun Asp.Net Ajax kaynaklı olduğundan cevap verememeleri normal.
- Ajaxpro kutuphanesi sorunsuz çalışıyor... http://www.bamtur.com adresinde çalışan örnekleri mevcut.

Her hangi bir sorunuz ya da sorununuz varsa yanıtlamaktan mutluluk duyarım.





Article Comments1 Comment

  • Jaded

    Posted on June 20th, 2008 at 9:50 pm

    Konu anlatımı çok güzel yalnız birkaç eksik nokta var. ConfigSections’a asagidakinin yazilmasi ve projeye UrlRewritingNet.UrlRewriter.dll’inin eklenmesi gerekli.

    Kaynak olarak da http://www.urlrewriting.net adresinizi yazarsanız, merak edenler sampleproject’i inceleyebilirler.

    Elinize,emeğinize sağlık teşekkürler.

Leave a Comment

Required
Required (Won't be published)
Optional
Avatar
Add your picture!
Join Gravatar and upload your avatar. It's free!