İnternet'te gezinirken bir çoğumuzun amacı web sitesi bulmak değil de belli bir içeriği barındıran web sayfaları bulmaktır. Bulduğumuz web sayfalarının URL'leri (adresleri) okunaklı ve anlamlı ise aklımızda tutmamız çok daha kolay olur. PHP ve ASP gibi dillerin daha çok kullanılmaya başlamasıyla, içeriği dinamik olarak üretilmeye başlanan web sayfalarının URL'leri karmaşık ve anlaşılmaz haller almaya başladı. Bu yazı dizimizde karmaşık URL'leri Apache'nin mod_rewrite isimli modülünü kullanarak nasıl düzenli bir hale getirebileceğimizden bahsedeceğim.
Apache mod_rewrite Nedir?
Apache mod_rewrite URL işlemleri yapabileceğiniz güçlü bir Apache modülüdür. En basitinden en karmaşığına neredeyse her türlü URL değişikliğini yapmanıza olanak sağlar. Örnek verecek olursak: http://www.ornek.com/katalog.php?kategori=kitap&urunID=35 adresini http://www.ornek.com/katalog/kategori/kitap/35 ya da http://www.ornek.com/katalog/kategori/kitap/35/Kitap_adi şeklinde gösterebiliriz.
Düzenli ifadeler
Apache mod_rewrite URL işlemlerini yapmak için düzenli ifadeleri kullanır. Bu yüzden eğer bilginiz yoksa öncelikle düzenli ifadelerle ilgili yazılarımızı (Düzenli İfadeler 1, Düzenli İfadeler 2, Düzenli İfadeler 3) okumanızı tavsiye ederim.
.htaccess Dosyaları
.htaccess dosyaları Apache sunucunuzla ilgili ayarlamalar yapabileceğiniz dosyalardır. Bunlar yayınlanan klasörlerin içinde bulunur ve sunucuya her istek gönderildiğinde klasörler en üstten, en alta kadar taranır. Bu sayede sunucunu isteğe nasıl cevap vereceğine karar verir. Herhangi bir klasörde .htaccess dosyası bulunmuyorsa üst klasörlerdeki ayarlar geçerlidir. Eğer hiç .htaccess dosyasıyla karşılaşılmamışsa sunucunun varsayılan ayarları kullanılır.
URL Rewrite modülünün komutları da sunucu genelinde uygulanacaksa sunucu varsayılan ayarları arasına, klasör bazından uygulanacaksa .htaccess dosyalarına yazılır.
URL Rewrite Komutları
RewriteEngine
RewriteEngine'i (yeniden yazma motoru) çalıştırabilmemizi sağlar. URL Rewrite yapabilmemiz için açık konuma getirmemiz gerekiyor. Bunun için .htaccess dosyasına şu satırı ekliyoruz:
RewriteEngine on
RewriteRule
URL Rewrite kurallarını belirlememizi sağlar. Yapacağımız değişiklikler bu komut sayesinde olacak. Örneğin .htaccess dosyası şu şekilde ise:
RewriteEngine on
RewriteRule ^eskisayfa.htm$ yenisayfa.htm
eskisayfa.htm'yi açanlar karşılarında yenisayfa.htm'yi görecekler. Örnekte görüldüğü gibi RewriteRule'un ilk argümanı bir düzenli ifade.
RewriteCond
Bazen URL Rewrite kurallarını her zaman değil de bazı durumlarda kullanmamız gerekir. RewriteCond bu durumları belirlememizi sağlar. Örneğin .htaccess dosyasına:
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^80\.90\.
RewriteRule ^eskisayfa.htm$ yenisayfa.htm
yazarsak ip adresi 80.90. ile başlayanlar eskisayfa.htm yerine yenisayfa.htm yi görecekler.
Yazı dizimizin bu ilk bölümünde genel olarak URL Rewrite, Apache mod_rewrite modülü ve komutlarından bahsettim. Gelecek ay komutların ayrıntılarını örneklerle inceleyeceğiz.