Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

ASP, IIS, URL Rewrite ve SEF Linkler

Konu, 'ASP' kısmında skacurt tarafından paylaşıldı.

Konu Durumu:
Daha fazla cevap için açık değil.
  1. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    Yanıt Yazacaklara Not:
    Konuyla doğrudan ilgisi olmayan ancak URL Rewrite modülü ile ilgili sorunuz varsa bunları konu altında cevap olarak değil, yeni bir konu açıp, çok gerekiyorsa bu konuyu referans göstererek sormanız hem yardım almanızı hem de kendi konunuzu bulmanızı kolaylaştıracaktır.
    Forumda konu açmak ücretsizdir :)
    Buna riayet etmeniz ricasıyla.


    Merhaba.

    PHP geliştiricilerinin URL Rewrite yapmak için kullandıkları mod_rewrite modülü sayesinde basit desenlerle çok hızlı şekilde sef linkler yaratılabiliyor.
    ASP geliştiricilerinin ise IIS'in benzeri bir yerleşik modülü olmaması dolayısıyla sef linkler oluşturmada büyük sıkıntıları vardı.
    Windows 2000 ve 2003 sunucular ile birlikte gelen IIS 5 ve IIS 6 için benzeri modüller ancak 3. parti yazılımlarla geliyordu.
    Bunların en bilineni ve neredeyse birebir mod_rewrite gibi çalışan Helicontech'in Isapi Rewrite modülüydü.
    Fakat herkes sunucu sahibi olmadığı ve ücretli olması (ücretsiz olan Lite sürümlerine değinmiyorum) bu modülün bulunabilirliği konusunda sıkıntı yaratıyordu.
    Windows 2008 ile birlikte IIS 7.x için Microsoft'un yayınladığı Url Rewrite modülü IIS ile Url Rewrite yapmaya olanak sağlıyor.
    Varsayılan olarak gelmeyen, ayrıca kurulması gereken bu modülle basit Regex desenleri ile sef linkler oluşturmaya çalışacağız. URL Rewrite 2.0 ile Regex dışında Wildcard kullanarak da kural oluşturabiliyoruz.


    Nelere ihtiyaç duyacağız?


    • ASP desteği ile kurulmuş IIS 7.x (Windows Vista, 7 veya 2008)
    • Url Rewrite Module 2.0 : x86 / x64
    • Giriş seviyesinde Regex bilgisi.

    Linkten URL Rewrite'ı işlemci mimarinize göre x64 veya x86 olarak indirip kurun. Kurulum pakedini "Yönetici Olarak Çalıştır" ile kurmanız gerekebilir.
    Kurulum tamamlandıktan sonra IIS Yöneticisi’ni açıp Siteler’den Varsayılan Web Sitesi’ne (Default Web Site) tıkladığımızda panelde aşağıda görüldüğü gibi URL Rewrite ikonu görünecek.

    Eki Görüntüle 9699

    İpucu: IIS Yöneticisini açmak için klavyeden win + r ‘ye basıp çalıştır ekranına inetmgr yazıp enter’a basabilirsiniz.

    Biraz Regex'e Değinelim

    Regex ile ilgili fazla teorik konuşmayıp, oluşturduğumuz kurallara uyan stringler ile ilgili çeşitli işler yapmamıza yaradığını söylemem yeterli.
    Az sonra ASP için sef link oluşturmak istediğimizde lazım olacak basit desen örnekleri şöyleler:

    1. "a" harfi ile başlayan sonu .html ile biten metin deseni (alabora.html : "alabora" kısmı işleme sokulacak):

      Kod:
      ^(a.*)\.html$
    2. "b" harfi ile başlayıp "-" ayracı ile ayrılıp rakamsal değer ile devam eden sonu .html ile biten metin deseni (banner-345345.html : "345345" kısmı işleme sokulacak):
      Kod:
      ^b.*\-(\d+)\.html$
      İlk desende tüm html dosyasının adını alacağız çünkü deseni o şekilde yarattık.


    Yavaş Yavaş Başlayalım

    Şimdi çok az bu işlemlerde Regex ne işe yarar göz attıktan sonra iki ayrı desen için 2 ayrı asp dosyası oluşturup sef linklerimizi test edebiliriz.

    a.asp

    PHP:
    <%
    Response.Write(Request.QueryString("metin"))
    %>
    Hatırlatma: Tüm işlemleri localhost’da yani ana dizinde yaptığınızı varsayıyorum. Bu yüzden a.asp’nin göreceli yolu
    Kod:
    http://localhost/a.asp
    olacak.

    IIS Yöneticisi’nde yukarıda resimde gösterdiğim URL Rewrite ikonuna çift tıklayın. Sırasıyla şu yolları izleyin;
    Sağ bölmede Eylemler’de Add Rule(s) > Açılan pencerede Inbound Rules’dan Blank rule’u seçip Tamam’ı tıklıyoruz.
    Karşımıza gelen bir çok yapılandırma yapılabilecek form ile ilgili fazla kafa karıştırmak istemiyorum, aşağıdaki resme uygun olarak doldurun ve sağ üstteki Uygula’ya tıklayın. Pattern alanına yukarıda a.asp için verdiğim deseni kopyalayıp kullanabilirsiniz.

    Eki Görüntüle 9705

    b.asp

    PHP:
    <%
    Response.Write(Request.QueryString("id"))
    %>


    IIS Yöneticisi’ni açıp yine a.asp için yaptığımız gibi bir kural daha oluşturacağız. Pattern alanına b.asp için verdiğim deseni kopyalayıp kullanabilirsiniz. Diğer farklılıklar resimdeki gibi, Uygula’ya tıklayıp kaydetmeyi unutmuyoruz.

    Eki Görüntüle 9701

    Test Etmeye Hazırız

    Artık en sevdiğimiz tarayıcıyı açıp deneme yapabiliriz.
    İlk örnekte a ile başlayan .html ile biten bir desen tanımlamıştık. Bu desene uyan istekler a.asp dosyasına metin parametresi ile rewrite yapacaktı. O zaman adresimiz
    Kod:
    http://localhost/ailebasladimhtmlilebittim.html
    olabilir.

    Eki Görüntüle 9697

    Desende .html’e kadar olan kısmı alıp ({ R: 1} ) a.asp’ye metin olarak göndertmiştik. O yüzden ailebasladimhtmlilebittim sonucunu aldık.

    İkinci örnekte b ile başlayıp – ayracı ile ayrılıp nümerik değer ile biten sonu .html olan url’ler için rewrite kuralı tanımlamıştık. Aldığımız nümerik kısmı b.asp’nin id parametresine gönderdik. Test adresimiz :
    Kod:
    http://localhost/banner-123321.html
    Eki Görüntüle 9700

    Bize 123321 sonucunu verdiğine göre bu kural da tamam demektir.

    Url Rewrite ile bu işlem bu kadar basit. Şu andan sonra ilk aklınıza gelecek şeylerden birinin pekala ben bunu kendi bilgisayarımda yaptım ancak ya bu hizmeti alabileceğim bir hostta nasıl rewrite işlemi yapacağım olacaktır. Anadizinde oluşan web.config dosyasına bakarsanız bu merakınızı bir nebze giderir. Rewrite kuralları, çok benzemese de XML yapısı içinde .htaccess gibi tanımlı durumdalar göreceksiniz. Yerel sunucunuzda kurallarınızı oluşturup web.config dosyanızı host alanına göndermeniz aynı kuralların aktif olmasına yetecek.

    İlk kurallarımızdan sonra web.config dosyası içeriği:

    Kod:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
    	<rewrite>
    		<rules>
    			<rule name="a_ile_baslayan_html_ile_biten">
    				<match url="^(a.*)\.html$"/>
    				<action type="Rewrite" url="a.asp?metin={R:1}"/>
    			</rule>
    			<rule name="b_ile_baslayan_rakam_iceren_html_ile_biten">
    				<match url="^b.*\-(\d+)\.html$"/>
    				<action type="Rewrite" url="b.asp?id={R:1}"/>
    			</rule>
    		</rules>
    	</rewrite>
    	</system.webServer>
    </configuration>
    Kurallardaki {R:1} , {R:0}nedir?

    PHP ile biraz uğraşan ve .htaccess ile Rewrite yapmış yada sadece açıp biraz bakmış olanlar bilirler ki orada gruplamalar ( Regex deseninde parantezler içinde içinde kalan kısımlar -- ör: ilk desendeki (.a*) -- ) $1, $2, $3 şeklinde sıralarına göre kullanılırlar. Url Rewrite ile bunlar {R:1}, {R:2} şeklinde ilerlerler. {R:0} ise her zaman tüm istek URL’ini verir.

    Az önce kural tanımladığımız pencerede Pattern alanına regex desenleri yazmıştık. Onun yanındaki Test butonuna tıklayıp deneme URL'leri girdiğimizde aşağıdaki gibi test sonuçları alabiliriz. Bu kuralların ve kurallardaki gruplamaların gerçek isteklere nasıl eklendiği hakkında yararlı olacak.

    Eki Görüntüle 9702

    Eki Görüntüle 9703

    .htaccess kullanmak?

    Daha önce Windows sunucunuzda barındırdığınız bir PHP uygulamada sef linkler kullanamamanın sıkıntısını yaşamış olabilirsiniz.
    Bu durumda sef linklerden feragat ediyorduk.
    URL Rewrite sayesinde .htaccess dosyasını IIS Yöneticisi’nden Import edip web.config standartlarına uydurabiliyor. Yani bu Linux sunucularında olduğu gibi sef linklerle çalışabilen bir PHP uygulamaya sahip olabilirsiniz demek.
    Bunu yapabilmek için yine panelden URL rewrite ikonuna tıklayıp bu sefer Add Rule(s)’e değil de Import Rules’e tıklayıp açılan pencerede doğrudan .htaccess yapılandırması metnini girerek veya dosyayı göstererek web.config oluşturabilir / ekleyebilirsiniz.

    Eki Görüntüle 9696

    a.asp, b.asp ve web.config dosyası ektedir. Url Rewrite'ı kurup bu paketteki dosyaları doğrudan ana dizininize atıp yazıdaki test adreslerini deneyerek tecrübe etmeye başlayabilirsiniz.

    Şimdilik bu kadar, kolay gelsin.
     
    Son düzenleme yönetici tarafından yapıldı: 1 Ocak 2014
  2. aspmaker

    aspmaker Daimi Üye

    Kayıt:
    17 Mart 2010
    Mesajlar:
    1,150
    Beğenilen Mesajlar:
    3
    Meslek:
    web programlama
    Şehir:
    Ankara
    yalın ve anlaşılabilir olmasının yanında ihtiyaçlara yönelik örneklerle desteklenmesi çok iyi olmuş. herşey için teşekkürler.
     
  3. Ferdi

    Ferdi ASP Prog. & PSD to CSS

    Kayıt:
    19 Ağustos 2009
    Mesajlar:
    1,497
    Beğenilen Mesajlar:
    1
    Meslek:
    Web Developer
    Şehir:
    Sinop, İstanbul
    teşekkürler skacurt gerçekten güzel çalışma olmuş eline sağlık
     
  4. By Akuma

    By Akuma Aktif Üye

    Kayıt:
    7 Ekim 2009
    Mesajlar:
    372
    Beğenilen Mesajlar:
    1
    Meslek:
    interface & Front End Developer
    Eline ve Emeklerine Sağlık, Saol skacurt Gayet Anlaşılır ve Çoğu Asp Yazılımcının Öğrenmek istediği bir konuydu.
     
  5. By Akuma

    By Akuma Aktif Üye

    Kayıt:
    7 Ekim 2009
    Mesajlar:
    372
    Beğenilen Mesajlar:
    1
    Meslek:
    interface & Front End Developer
    Server 2008'e Geçemeyenler için(ki Bunlardan Biride Benim :)) 404 Kavramınıda Anlatabilirmisin skacurt Tabi Eğer Zamanın Olursa.
     
  6. James De Souza

    James De Souza Cave Quid Optes

    Kayıt:
    19 Şubat 2008
    Mesajlar:
    2,135
    Beğenilen Mesajlar:
    0
    Meslek:
    Off
    Şehir:
    İzmir
    İnanılmaz gerçekten! Daha bugün işe gelirken yolda aklıma yeni başlamak istediğim projede asp ile url-rewrite kullanmak geldi; ancak daha önce hiç denemediğim için kendi kendime yine araştırmayla geçecek sürenin sıkıcı olacağını düşünüyordum... ki skacurt hissetti mi ne yaptı beni bu dertten kurtardı :) Allah Razı Olsun diyorum başka bir şey demiyorum.
     
  7. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    Siz de sağolun arkadaşlar.

    By Akuma, 404.asp yöntemlerini anlatmak ne kadar güçse anlamak da onun bir kaç katı daha yüksek. Bence 2008 sunucuya geçiş yap. 404 hatas sayfası yöntemi ile şu yukarıdaki anlattığım kolaylık ve stabilitenin 10'da birini bulamayacaksın. 404.asp yapayım derken ASP uzmanı olup çıkman işten bile değil. 90'a yakın deseni 404.asp ile yapmak zorunda kalmış biri olarak ben önermiyorum. Çünkü Url Rewrite yapabilme ihtimalim olsaydı, atıyorum 2 hafta değil, 5 saat uğraşacaktım. Fark ortada. 2003 sunucu kullanma zorunluluğun varsa ve sunucu erişimin varsa yazıda değinip geçtiğim Helicontech Isapi'yi kurarsan desenler konusunda yardımcı olurum ama inan 404.asp'yi hiç anlattırma bana :D
    Ama yine forumda biraz araştırırsan geçen yıllar içinde bir çok 404.asp yöntemini anlatan, değinen konular oldu.
     
  8. By Akuma

    By Akuma Aktif Üye

    Kayıt:
    7 Ekim 2009
    Mesajlar:
    372
    Beğenilen Mesajlar:
    1
    Meslek:
    interface & Front End Developer
    skacurt 404.asp yöntemini biraz biliyorum ama uğraşmak o kadar zorki her herşeyi bi dert her sayfa için desen oluştur :D Dediğin Gibi Yapalım Helicontech Isapi'yi Denim Ben Artık Takıldığım Yerde skacurt diye yırtınırım :D
     
  9. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    Kabul. Gün olur 2008'e geçersen yazıda anlattığım gibi .htaccess'i Import etmek bir kaç saniye. Kur onun ile ilgili yardımcı olurum.
     
  10. By Akuma

    By Akuma Aktif Üye

    Kayıt:
    7 Ekim 2009
    Mesajlar:
    372
    Beğenilen Mesajlar:
    1
    Meslek:
    interface & Front End Developer
    Yaw Bu Arada skacurt Şu IIS Panelini Tr Açıklamalarınıda yazsaydın süper olurdu zira ecnebice bilmeyenler olabilir ilk başta ben :D
     
  11. sinan3

    sinan3 Aktif Üye

    Kayıt:
    5 Aralık 2007
    Mesajlar:
    270
    Beğenilen Mesajlar:
    0
    Meslek:
    öğrenci
    Şehir:
    mersin
    güzel bir anlatım olmuş teşekkürler hocam
     
  12. UfukArt

    UfukArt Daimi Üye

    Kayıt:
    28 Kasım 2008
    Mesajlar:
    1,861
    Beğenilen Mesajlar:
    1
    Meslek:
    Bilişim
    Şehir:
    İstanbul
    Sağol skacurt, zahmet ettin ama belki de yıllarca bu forumda referans alınacak bir yazı döşedin. Düşün ki 404.asp hala rağbet görürken, rewrite ne uzun süreler kullanılacak. Sanırım zamanla örnekleri çoğaltmak zorunda kalacaksın. Çünkü bu konuda sıkıntı yaşayan herkes sana başvuracak. (Başta ben.) Regexp konusunda senin canını bayağı bir sıkacağım gibi görünüyor...
    Şimdi netten asp - regexp örneklerini ve anlatımlarını topluyorum. Üzerinde çook çalışmam lazım. Çook örnekler yapmam lazım hakim olabilmem için.
    Çok teşekkürler...
     
  13. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    Ben ASP forumunda daha gelişmiş "Url Rewrite" soruları görmekten mutluluk duyarım. Hatta PHP geliştiriciler de gelsinler IIS'de PHP için desen sorunlarını sorsunlar. Ancak 404.asp ile cebelleşmek iş değil. ASP-Regexp örnekleri yerine doğrudan Regex'e giriş yap. Zira URL Rewrite'da salt regexe ihtiyacın olacak. Regex Buddy adlı programı edin, incele tavsiyemdir. En azından işleyiş ile ilgili fikir vereceği gibi anlık yazarak test yapabilirsin. Ayrıca senin yerine bilinen neredeyse tüm programlama dillerinin kodlarını hazırlaması da cabası. Kolay gelsin.
     
  14. UfukArt

    UfukArt Daimi Üye

    Kayıt:
    28 Kasım 2008
    Mesajlar:
    1,861
    Beğenilen Mesajlar:
    1
    Meslek:
    Bilişim
    Şehir:
    İstanbul
    http://www.siteadi.net/nedir/kategori-adi_buraya/1052-konu-basligi-buraya.html
    http://www.siteadi.net/kategori/65-kategori-adi_buraya
    http://www.siteadi.net/hakkinda.asp
    http://www.siteadi.net/rss.asp
    http://www.siteadi.net/rsskategori.asp?KATID=16
    şeklindeki url'lerimi nasıl yazarım yapamadım işin açığı...
    Hem bana yardımcı olması hem de örnek olması açısından bu problemi mi çözmemde yardımınızı bekliyorum.
    En azından regex ile ne nasıl ifade edilir bilemiyorum.
    Bir de
    http://www.siteadi.net/nedir/kategori-adi_buraya/1052-konu-basligi-buraya.html
    şeklide ki url'yi gittiği sayfada mevcut 404'te olduğu gibi split edip işlem yapılacak değil mi?
    Yoksa orada da değişiklik yapmalı mıyım?
    Son olarak mevcut utrl yapım doğru bir şekilde midir? Siz olsanız nasıl bir url yapısı kurardınız benim yapımdan yola çıkarak.
     
  15. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    Korkarım bu iş seni epey uğraştıracak. Zira sen ID kısımlarını URL'den splitlerle vs.. uğraşarak çekiyordun. URL Rewrite'da ise siteyi klasik yöntemlerle hazırlıyor, (yazi.asp?id=123) Regex ile http://www.siteadi.net/nedir/kategori-adi_buraya/1052-konu-basligi-buraya.html "1052" kısmını alıp yaziasp?id={R:1} gibi bir şekilde rewrite ediyoruz. Yani kısacası tüm sistemini klasik hale çevirmen gerekli. Zaten bu, uygulamayı klasik hazırlaıp query string parametrelerini işlemek ile ilgili. Kısacası Split falan asla yok, verdiğim örnekte de görüleceği üzere.
     
  16. UfukArt

    UfukArt Daimi Üye

    Kayıt:
    28 Kasım 2008
    Mesajlar:
    1,861
    Beğenilen Mesajlar:
    1
    Meslek:
    Bilişim
    Şehir:
    İstanbul
    Anladım...
    yazi.asp sayfamın başında
    <%
    Set adres = Request.ServerVariables("QUERY_STRING")
    secilialan = Split(adres,"/")
    gelenveri=secilialan(5)
    bol=Split(gelenveri,"-")
    ID=guvenlik(bol(0))
    %>
    var. bunun yerine
    ID=guvenlik(Request.ServerVariables("QUERY_STRING"))
    yazmak değil mi olay...
    Bu beni çok yormaz. Çünkü sadece iki sayfamda bu işlemi yapıyorum. Yine birşeyleri atlıyor muyum?
    http://www.siteadi.net/nedir/kategori-adi_buraya/1052-konu-basligi-buraya.html
    Sadece bunun için rule yazmayı öğretir misin? Ben o örnekten yola çıkarak ilerleyeyim. Olmaz mı?
     
  17. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    Şöyle açıklamaya çalışayım;

    1- 404.asp'yi, Split()'i unut.
    2- Tüm parametrelerini standart hale getir. ID = Request.QueryString("id") olacak şekilde.
    3 - ID değerini alabileceğin deseni'i oluştur. Ör:
    Kod:
    ^nedir/[\w\-]+/[B](\d+)[/B]\-[\w\-]+\.html$
    Rewrite URL : yazi.asp?id={R:1}
    4- Sitende http://www.siteadi.net/nedir/kategori-adi_buraya/1052-konu-basligi-buraya.html gibi bir adresi test et.

    Açılan sayfa aslında şu olacak ; http://www.siteadi.net/yazi.asp?id=1052
     
  18. UfukArt

    UfukArt Daimi Üye

    Kayıt:
    28 Kasım 2008
    Mesajlar:
    1,861
    Beğenilen Mesajlar:
    1
    Meslek:
    Bilişim
    Şehir:
    İstanbul
    Oldu. :)
    Kod:
    <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                        <match url="^yazi/[\w\-]+/(\d+)\-[\w\-]+\.html$" />
                        <conditions>
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="yazi.asp?ID={R:1}" />
                    </rule>
    
    Sağol skacurt...
     
  19. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    Sen buradan alır yürürsün artık, soracağın desenler ile ilgili olur. Kolay gelsin.
     
  20. tahag

    tahag Üye

    Kayıt:
    7 Ağustos 2008
    Mesajlar:
    91
    Beğenilen Mesajlar:
    0
    sunucu bizim değilsede dediğin yöntemlerden birini kullanabiliyormuyuz resellerle felan?
     
Konu Durumu:
Daha fazla cevap için açık değil.