mod_rewrite ile URL Yönlendirmesi


mod_rewrite_logoWeb dünyasına şöyle ya da böyle girmiş arkadaşlar SEO diye bir kısaltmayı kesinlikle duymuşlardır. Uzatılmış şekli Search Engine Optimization olan SEO, web sitelerinin arama motorlarınca(Google, Bing vb.) kolay taranacak hale getirmeye verilen isimdir. Peki neden sitelerimizi arama motorlarına beğendirmeye çalışıyoruz? Çünkü; eğer biz sitemizi arama motorlarının kolay okuyabileceği biçime sokarsak, bu motorlar da bizim sitemizi daha kolay dizinleyebildikleri için bizim siteyi ilgilendiren arama sonuçlarında sitemiz ön sıralarda çıkar.

Arama Motoru Optimizasyonu, birkaç tane işlemin birleşmesinden oluşur. Site haritası oluşturma, meta etiketleri oluşturma, kullanıcı dostu adresler oluşturma vb gibi. Bu yazıda Kullanıcı Dostu Adres veya diğer bir ismiyle Arama Motoru Dostu Adresleri oluşturmanın bir yolundan bahsedeceğim.

SEF(Search Engine Friendly) URL diye kısaltılan bu işlem sitemizin içerisindeki dinamik sayfaların adreslerinin anlaşılabilir bir şekilde olmasını sağlar. Örneğin; www.benimsitem.com/sayfa.php?id=10 adresi kullanıcıya ve arama motoruna çok şey ifade etmez ama sayfamızın adresi www.benimsitem.com/sayfa-10/benim-sayfam.html olması daha anlamlıdır. En azından sayfa başlığı adreste bulunur ve hatırlanması ve bulunması daha kolaydır. Arama motorlarının, aranan kelimeleri adreslerinde bulunan sayfaları daha üstlerde çıkardığını biliyor muydunuz?

Yukarıdaki işlemi yapmanın birkaç yolu vardır. Bunlardan biri de Apache nin bir modülü olam mod_rewrite’ dir. Eğer, Linux kurulu bir sunucunuz varsa %99.9 ihtimalle sunucunuzda Apache Server kuruludur ve yine büyük ihtimalle mod_rewrite etkin durumdadır. Eğer Windows sunucu üzerinde PHP ile çalışıyorsanız yine çeşitli seçenekleriniz mevcut. Bunlara daha sonra değinebilirim, şimdilik sadece mod_rewrite den bahsedeceğim.


Başlamadan söyleyeyim bu işlemi yapabilmek için Düzenli İfadeleri(Regular Expressions) bilmeniz gerekiyor. Ayrıntılı bilgiyi http://e-bergi.com/2008/Mayis/Duzenli-Ifadeler-1 ve http://e-bergi.com/2008/Agustos/Duzenli-Ifadeler-3(ikisini birden incelemenizi öneririm) adresinden alabilirsiniz.

Devam edelim;  URL yönlendirme için kurallar belirtmemiz gerekiyor. Bu kurallar hangi tür adresin nereye yönleneceğini belirtecek. Bu kuralları .htaccess dosyasına yazıyoruz. Dosyamız şuna benzeyecek:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
;Buraya kurallar gelecek
</IfModule>

Öncelikle birkaç şeyi açıklayalım;

  • RewriteEngine On : Bu satır ile Rewrite işleminin başlatıyoruz.
  • RewriteBase / : Bu satırda eğer sitemiz kök dizinde bulunuyorsa böyle kalması gerekir. Eğer sitemiz bir dizin içerisindeyse şöyle yazmamız gerekir : RewriteBase /dizin/
  • RewriteCond %{REQUEST_FILENAME} !-f ve RewriteCond %{REQUEST_FILENAME} !-d : RewriteCond bir koşul belirtir. Bir nevi if deyimi diyebiliriz. Burada belirtilen koşul her zaman için gereklidir çünkü adresin bir dosyaya ya da dizine denk gelmemesi halinde yönlendirme yapılması gerekiyor. Yani, sitemizde varolan bir resme ulaşırken yönlendirme yapılmasını istemeyiz. Bu satırlar ile bunu sağlıyoruz.

Şimdi kuralları nasıl yazmalıyız onu inceleyelim. Örneğin, www.benimsitem.com/sayfa-10/benim-sayfam.html adresini www.benimsitem.com/sayfa.php?id=10 yönlendirmek istiyoruz. O zaman şöyle bir kural yazmamız gerekir.

RewriteRule ^sayfa-(\d+)/.+\.html$ sayfa.php?id=$1 [NC,L]

Eğer Düzenli İfadelere aşina iseniz bu satır biraz tanıdık gelecektir. Ama şöyle bir açıklayayım, “^” işareti ile ifadenin nasıl başlayacağını belirtiyoruz. Aslında koymasakta olur ama o zaman “www.benimsitem.com/hedehode-sayfa-10/benim-sayfam.html” şeklindek bir adresi de kabul eder ve karışıklık ortaya çıkabilir. Parantezler ile belirttiğimiz alan bizim değişkenimiz oluyor; ki zaten “$1″ diyerek orayı kastediyoruz. “\d” oraya sayı ifadesinin gelmesi gerektiğini belirtiyor. Eğer orada sayı yerine başka birşey bulunursa o zaman bu kural işletilmez. “.” düzenli ifadelerde herhangi bir karakter anlamına gelir. “\.”, yani noktanın önüne “\” koyduğumuzda onun normal bir nokta olduğunu belirtiriz. Bu düzenli ifadelerdeki tüm özel karakterler için geçerlidir. “+” ise kendinden önce gelen ifadenin bir adet veya daha fazla bulunmasını gerektirir. “$” işareti de düzenli ifadenin sonunun nasıl biteceğini belirtir. Dediğim gibi, bu paragradı daha iyi anlamak için düzenli ifadeleri öğrenmeniz gerekir.

Sonra araya boşluk koyup bu ifadeye uyan adresin nereye yönlendirileceğini söyleriz. Daha sonrada yönlendirme parametrelerini köşeli parantezler içerisine yazarız. Burada belirtilen “NC” büyük-küçük harf önemsemesini, “L” ise bu kuraldan sonra yönlendirmenin bittiğini belirtir. Çok farklı şeyler düşünmediğimiz sürece standart parametrelerimiz bunlar olacaktır.

Bir örnek daha yapalım farklı kullanımları görelim. Aşağıdaki kullanım benim sitemdeki (arkaplan-resmi.com) kullandığım kurallardan biri;

RewriteRule ^Etiket/(\w+)/Sayfa-(\d+)/?(index.html?)?$ etiketler.php?etiket=$1&sayfa=$2 [NC,L]

Üsttekinden farklı olarak 2 değişkenimiz var. “\w” ifadesi bir karakter dizisi gelmesi gereken yeri belirtir. Bir de “?” karakteri var, bu karakter de kendinden önce gelen ifadenin bir veya sıfır adet olmasını sağlar. Bir kereden fazla tekrar ediyorsa ifade yine uyuşmayacaktır.  Bu kural aşağıdaki adresleri www.arkaplan-resmi.com/etiketler.php?etiket=deniz&sayfa=2 adresine yönlendirecektir.

  • http://www.arkaplan-resmi.com/Etiket/deniz/Sayfa-2
  • http://www.arkaplan-resmi.com/Etiket/deniz/Sayfa-2/
  • http://www.arkaplan-resmi.com/Etiket/deniz/Sayfa-2/index.htm
  • http://www.arkaplan-resmi.com/Etiket/deniz/Sayfa-2/index.html

Yazıyı burda bitirmek durumundayım çünkü fazla uzun yazının okuyanı sıktığını düşünüyorum. Benim amacım size en azından fikir verebilmek. Ben size başlamak için nokta gösteriyorum, gerisini sizin devam ettirmeniz gerek, biliyorsunuz ki: “Başlamak bitirmenin yarısıdır”.

Size yardımcı olacağını düşündüğüm bir iki dosya var paylaşmak istediğim.

Birincisi mod_rewrite ile alakalı bir Cheat Sheet (Kopya kağıdı). Çoğunlukla kullanılan komutlar, söz dizimi ve birkaç küçük örnek var. Kuralları yazarken sizin için iyi bir referans olacaktır. (Benim çok işime yaradıydı)

mod_rewrite Cheat Sheet

İkincisi ise yazdığınız kuralları pratikte deneyebileceğiniz bir test programı. Kuralları direkt .htaccess dosyası ile denemek zor olmakla birlikte zaman kaybettirir. Bu test aracı ile daha kısa zaman harcarsınız.

Ekran görüntüsü

Regular Expression Test Utility - Düzenli ifade test aracı

İndirme

Normalde bu aracı ISAPI Rewrite (Windows sunucular için URL yönlendirme uygulaması) sitesinden indirmiştim. Şimdi aradım ama orjinalini bulamadım. Benim türkçeleştirdiğim halini indirmek için tıklayın.

Yazının size yardımcı olması dileğiyle, iyi günler dilerim. Allah’ ın selamı üzerinize olsun. (Ehe, bende yaptım : ))

Popularity: 100%

, , , , , , , , , , , ,

  1. Henüz hiç yorum yok.
(yayınlanmayacak)