• 23-12-2009, 10:05:35
    #1
    Merhaba arkadaşlar.. PHP de SEF link yapımı için pek fazla aydınlatıcı yazı bulamadım aradığımda öğrenme aşamasında açıkcası. Benim gibi meraklı olan ama kaynak bulamayan arkadaşlara kaynak olması açısından bir anlatım yapim dedim. Umarım yararlı olur. (:


    ------------------


    Bu yazımda biraz PHP’deki SEF link olayından bahsetmek istiyorum. Script kodlarken artık önemli bir detay olarak görülüyor SEF link yapısı. Peki nedir bu SEF link dediğimiz olay. Açılımı Search Engine Friendly olan SEF, SEO dostu bir scriptte bulunması gereken olmazsa olmaz yapıdır. Yani link yapımızı arama motoru dostu bir yapıya çevirmektir. Arama motorları tarafından daha anlamlı olmasıdır linklerin.

    Normalde bir script yazdığınızda ‘detay.php?id=1′ şeklinde bir yapıya sahip olur. Bunun google için hiçbir anlamı yoktur açıkcası. Biz bu yapıyı ‘haber-basligi.html’ şeklinde kelimelerden oluşan bir yapı ile listeleteceğiz. Bu şekilde her yazımızın adı urlde geçmiş olacak ve ilk durumdan daha anlamlı bir hale gelecektir linklerimiz. Bunun için öncelikle .htaccess dosyası oluşturmamız gerekiyor. Boş bir text dosyasına linklerimizi nasıl kullanacağımızı belirten kodları yazıyoruz ve .htaccess olarak kaydederek sitemizin bulunduğu dizine atıyoruz.

    Kullanabileceğiniz örnek kod;


    Options +FollowSymLinks
    RewriteEngine on
    
    RewriteRule ^haber-(.*)-(.*).html$ detay.php?id=$1&baslik=$2 [L,NC]
    Bu şekilde kullandığımızda linklerimiz haber-1-haber-baslik.html şeklinde olacaktır. Siz isterseniz .htaccess dosyanızda yapacağınız değişikliklerle bu yapıyı değiştirebilirsiniz. Bu işlemden sonra artık link yapısını ayarlamaya geldi sıra.

    Normalde;

    <a href="detay.php?id=<?php echo $row_Recordset1['id']; ?>"><?php echo $row_Recordset1['baslik']; ?></a>
    şeklinde olan yapıyı

    <a href="haber-<?php echo $row_Recordset1['id']; ?>-<?php echo $row_Recordset1['baslik']; ?>.html"><?php echo $row_Recordset1['baslik']; ?></a>
    şekline dönüştürüyoruz.

    Artık işlem tamam. Şu anda listeleme yaptığınızda linklerimiz detay.php?id= şeklinde değil de haber-3-baslik.html şeklinde olacaktır. Kalan son bir eksik yanı var şu an. Başlık eğer Türkçe karakter ya da boşluk karakteri içeriyorsa bu urlde kullanıldığında pek sağlıklı olmayacaktır. Bu yüzden bu boşlukları, sembolleri, Türkçe karakterleri bir fonksiyonla uygun bir hale getireceğiz.

    function turkceyap($deger) {
    $turkce=array("ş", "Ş", "ı", "(", ")", "‘", "ü", "Ü", "ö", "Ö", "ç", "Ç", " ", "/", "*", "?", "ş", "Ş", "ı", "ğ", "Ğ", "İ", "ö", "Ö", "Ç", "ç", "ü", "Ü");
    $duzgun=array("s", "S", "i", "", "", "", "u", "U", "o", "O", "c", "C", "-", "-", "-", "", "s", "S", "i", "g", "G", "I", "o", "O", "C", "c", "u", "U");
    $deger=str_replace($turkce,$duzgun,$deger);
    $deger = preg_replace("@[^A-Za-z0-9-_]+@i","",$deger);
    return $deger;
    }
    Fonksiyonumuzu tamamladıktan sonra bu fonksiyonumuzu echo kısmında kullanıyoruz. Bunu da şu şekilde basitce yapabiliriz.

    <?php $yenibaslik = turkceyap($row_Recordset1['baslik']); echo $yenibaslik; ?>
    Evet artık bu işlem de tamam. Linklerimizde ne Türkçe karakter ne de boşluk veya özel karakterler olacaktır. Ve artık SEO dostu SEF linklere sahibiz…


    Kaynak : http://www.selimturk.com.tr/php-sef-...l-yapilir.html
  • 23-12-2009, 12:55:25
    #2
    Üyeliği durduruldu
    eline saglık dostum.bu konuyla ilgili bende makele yazmıştım.
    bu sef olayının abartmamak lazım.ki google webmasteri static linkler iyidir dedi.static link yapan herkez seo(!) yapmış olmaz.ama bizim millet baya bir abarttı bu olayı.
  • 23-12-2009, 13:49:22
    #3
    eyvallah hocam çok makbule geçti
  • 23-12-2009, 14:39:02
    #4
    Teşekkürler hocam alttaki yapıyı biraz açabilirmisiniz?

    RewriteRule ^haber-(.*)-(.*).html$ detay.php?id=$1&baslik=$2 [L,NC]
  • 23-12-2009, 14:57:53
    #5
    metanek adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler hocam alttaki yapıyı biraz açabilirmisiniz?

    RewriteRule ^haber-(.*)-(.*).html$ detay.php?id=$1&baslik=$2 [L,NC]
    Hocam burada "id"li urlmizi nasıl tanımlayacağımızı belirtiyoruz.

    (.*)-(.*)
    kısmında iki tane değişken olduğunu gösteriyoruz. Yani

    (.*)
    bir değişken olduğunu belirtiyor.

    Değişkenleri nereden alacak peki ?

    değişkenleri de normal "id"li urlden alacak. Onu da ikinci kısımda belirtiyoruz.

    detay.php?id=$1&baslik=$2

    Böylece haber-[haberin idsi]-[haberin başlığı].html şekline getirmiş oluyoruz. Yukarıda da dediğim gibi değişkenleri istediğiniz yere koyarak kendi url yapınızı oluşturabilirsiniz.

    Örneğin ; haberler/123/bugun-hava-yagmurlu

    şeklinde bir yapınızın olmasını isterseniz

    RewriteRule ^haberler/(.*)/(.*)$ detay.php?id=$1&baslik=$2 [L,NC]
    şeklinde bir yapı kullanabilirsiniz.

    Sonda bulunan [L,NC] ifadeleri ise bayrak olarak geçiyor.

    Burada L ifadesi yönlendirmenin son olduğunu belirtiyor, yani sürekli tekrar edilmesini önlüyor. NC ise no case'den geliyor yani büyük küçük harf ayrımı yapmaksızın url yapısını düzenliyor.
  • 23-12-2009, 17:02:48
    #6
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Elinize sağlık. Güzel bir anlatım olmuş. +rep.

    Bu arada NC ekleyince normalde haber-basligi.html olan bir linki HABER-BASLIGI.html olarak açabiliyoruz, değil mi? Yanlış anlaşılma olmasında.
  • 23-12-2009, 17:15:04
    #7
    loperselim adlı üyeden alıntı: mesajı görüntüle
    Hocam burada "id"li urlmizi nasıl tanımlayacağımızı belirtiyoruz.

    (.*)-(.*)
    kısmında iki tane değişken olduğunu gösteriyoruz. Yani

    (.*)
    bir değişken olduğunu belirtiyor.

    Değişkenleri nereden alacak peki ?

    değişkenleri de normal "id"li urlden alacak. Onu da ikinci kısımda belirtiyoruz.

    detay.php?id=$1&baslik=$2

    Böylece haber-[haberin idsi]-[haberin başlığı].html şekline getirmiş oluyoruz. Yukarıda da dediğim gibi değişkenleri istediğiniz yere koyarak kendi url yapınızı oluşturabilirsiniz.

    Örneğin ; haberler/123/bugun-hava-yagmurlu

    şeklinde bir yapınızın olmasını isterseniz

    RewriteRule ^haberler/(.*)/(.*)$ detay.php?id=$1&baslik=$2 [L,NC]
    şeklinde bir yapı kullanabilirsiniz.

    Sonda bulunan [L,NC] ifadeleri ise bayrak olarak geçiyor.

    Burada L ifadesi yönlendirmenin son olduğunu belirtiyor, yani sürekli tekrar edilmesini önlüyor. NC ise no case'den geliyor yani büyük küçük harf ayrımı yapmaksızın url yapısını düzenliyor.
    çok teşekkürler hocam +rep bu konuyla ilgili bir çok anlatım var fakat kimse bu yapıyı anlatmamış böyle oluncada anlatmın bir kıymeti kalmıyor
  • 23-12-2009, 21:41:56
    #8
    merhaba bende sef link için uğraştım linkleri sizin belirttiğiniz gibi yapabiliyorum ama linke tıklayınca object not found diyor hiçbirşey çıkmıyor neden olabilir acaba?
  • 24-12-2009, 11:01:17
    #9
    by_grafitus adlı üyeden alıntı: mesajı görüntüle
    Elinize sağlık. Güzel bir anlatım olmuş. +rep.

    Bu arada NC ekleyince normalde haber-basligi.html olan bir linki HABER-BASLIGI.html olarak açabiliyoruz, değil mi? Yanlış anlaşılma olmasında.
    evet hocam eğer NC kullanmazsak yönlendirmede hata olacaktır büyük küçük harflerde. Doğru anlamışsınız (:

    cleaner80 adlı üyeden alıntı: mesajı görüntüle
    merhaba bende sef link için uğraştım linkleri sizin belirttiğiniz gibi yapabiliyorum ama linke tıklayınca object not found diyor hiçbirşey çıkmıyor neden olabilir acaba?
    hocam linkler dediğiniz şekilde çıkıyor ama sayfalara ulaşılamıyorsa büyük bir ihtimalle .htaccess dosyanızda sorun vardır. Parametreleri doğru eşleştirdiğinizden emin olmanızda fayda var.