mod_rewrite etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
mod_rewrite etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Kasım 2010 Çarşamba

apache mod_rewrite ile URL yeniden yazma.

Bir çok web yazılımcısı, URL'den doğrudan kullanmış olduğu değişkenleri, veya çalışma stilini, veya istemediği dosyalara erişimi kısıtlamak ister. Ya da sadece Arama motoru optimizasyonu (SEO) için geliştirme yapmak ister. Nitekim Apache'nin sunduğu mod_rewrite modülü ile URL'lerin tekrardan işlenmesi mümkün. Nasıl mı?

Örneğin sitenizin adresi www.deneme.com olsun.
www.deneme.com/test.php?lang=tr&limit=100&action=list şeklinde bir URL niz var. Bu URL'nin sonucu olarak da sitede türkçe dilinde 100 adet şarkı listelenmiş olsa bütün değişkenlerimiz apaçık ortada her an değiştirilmeye veya kurcalanmaya hazır beklemiş olurlar.
Bu URL'yi mod_rewrite ile www.deneme.com/tr/100/list şeklinde değiştirebiliriz. Ya da başka bir kural belirleriz buna göre yeniden oluştururuz. 
Bence bu sayfada bir arama motorunun bu sayfa ile ilgili düşünceleri pek de iç açıcı olmayabilir. Sebebi Url'de içerik ile ilgili bir şeyin olmaması.

Benim fikrime göre URL şöyle olmalı.
www.deneme.com/gunumuzun_en_iyi_100_türkçe_sarkisi-100_tr_list.html
Böyle olduğunda sondaki .html tamamen yalancı bir ek, 100_tr_list kısmında aslında değişkenlerimizi göndermiş oluyoruz, ondan önceki kısımda ise arama motorlarıın aradığı şeyi bulduğu hakkında bilgisini kuvvetlendirmiş oluyoruz. URL de ve sitede aynı içeriği bulması, sizin arma sonuçlarında bir miktar dha yukarlarda olmanıza imkan verebilir.

Kullanıcmı :
  • Apache de mod_rewrite modülünü açmanız gerekiyor. (httpd.conf içinde genellikle önünde # işareti ile comment'lenmiş oluyor)
  • httpd.conf içerisinde ilgili web klasörünüz için ayarlarda .htaccess in kullanımının açılması gerekiyor.   AllowOverride all diyerek açılıyor. (Daha fazla detay için lütfen apache allowoverride seçenekleri)
  • belirtilen sitenizin index.php sinin yanına .htaccess dosyası oluşturulması gerekiyor. Bu dosya RewriteEngine on  (yeniden yazma motorunu devreye alır)

    RewriteCond   %{REQUEST_URI} (yeniden yazma için regexp ifadesi (örn: .html yazarsanız .html gördüğü tüm durumlar yeniden yazma çalışır))
    RewriteRule  ([^/]+)-_-([^/]+)_([^/]+)(\.html)/?$ (yönlenmesini istediğiniz sayfa. Burada $1 , $2 diye $ karakterinden önce gruplanmış kısmı değişken olarak kullanabilirsiniz. ) [L] (burada da çeşitli ifadeler ile yeniden yazma işleminin tekrarlanmasını, tekrarlanmamasını, vs.. gibi özelliklerini ayarlayabilirsiniz.) 


Basit bir şekilde bir yeniden yazma işlemi şöyle olur.
RewriteEngine on
RewriteCond   %{REQUEST_URI} ahmet.html
RewriteRule  mehmet.html

31 Ekim 2010 Pazar

URL'deki Türkçe Karakterleri düzeltmek

Arama motorları URL deki içeriğe çok önem veriyorlar. Böyle olunca da web yazılımlarında ve sitelerinde URL ler ile oynama yapılabiliyor. Apache'de mod_rewrite kullanılarak URL'leri tekrardan yazabilmek mümkün. Bunu daha başka bir yazımda değineceğim. URL'lerde türkçe karakter olması zaten çok sonradan çıkan bir şey. Olmaması arama motoru optimizasyonu açısından önemli.

Burada yazmış olduğum bir fonksiyon var. türkçe karakterleri, boşlukları, alt tire (_), tırnak, vs... gibi karakterleri standart URL kurallarına göre düzenlemekte.

http://www.deneme.com/kırk küp kırkı da kulpu kırık küp.html diye bir linkiniz var.
bunun www.deneme.com ile .html arasında kalan kısmı optimize etmek istiyoruz. Bu kısmı fonksiyona sokarız.
Giri : kırk küp kırkı da kulpu kırık küp
Çıktı : kirk-kup-kirki-da-kulpu-kirik-kup
başına ve sonuna istediğimiz şeyi koyup linklerimizi oluşturabiliriz.
http:///www.deneme.com/kirk-kup-kirki-da-kulpu-kirik-kup.html şekline her arama motorunun rahatlıkla anlayabileceği hale dönüştürmüş oluruz.


/*Code*/

/**
     * Url'deki karakterleri düzeltir.
     *
     * @author Emre MACİT 15.04.2008
     *
     * @param string $string
     * @param bool $onlyChars
     * @return string
     */
    function correctChars($string , $onlyChars = false){
        $string = str_replace ( "ç", "c", $string );
        $string = str_replace ( "Ç", "C", $string );
        $string = str_replace ( "ğ", "g", $string );
        $string = str_replace ( "Ğ", "G", $string );
        $string = str_replace ( "ı", "i", $string );
        $string = str_replace ( "İ", "I", $string );
        $string = str_replace ( "Ş", "S", $string );
        $string = str_replace ( "ş", "s", $string );
        $string = str_replace ( "ü", "u", $string );
        $string = str_replace ( "Ü", "U", $string );
        $string = str_replace ( "ö", "o", $string );
        $string = str_replace ( "Ö", "O", $string );
        if($onlyChars) {
            return $string;
        }
        $string = str_replace ( "_", "-", $string );
        $string = str_replace ( " ", "-", $string );
        $string = str_replace ( ",", "-", $string );
        $string = str_replace ( "'", "", $string );
        $string = str_replace ( "\"", "", $string );
        $strCharCount = strlen ( $string );

        for($i = 0; $i < $strCharCount;) {
            if (! preg_match ( "/[0-9a-zA-Z\-\_]/", $string [$i] )) {
                for($j = $i; $j < $strCharCount - 1; $j ++) {
                    $string [$j] = $string [$j + 1];
                }
                $string = substr ( $string, 0, - 1 );
                $strCharCount --;
            } else {
                $i ++;
            }
        }
        $string = str_replace ( "--", "-", $string );
        $string = str_replace ( "--", "-", $string );
        $string = str_replace ( "--", "-", $string );
        return $string;
    }