Apache Mod_Rewrite Kullanımı ve Ayarları
Apache ‘nin mod_rewrite özelliği web sayfalarında karşımıza çıkan karışık url uzantılarını düzenli bir yapıya sokmak ve url işlemlerini yönetmemizi sağlayan çok kullanışlı bir modüldür. Mod_rewrite sayesinde karmaşık bir şekilde bulunan url uzantıları daha kullanışlı ve akılda kalıcı olarak tasarlanabilir.

http://www.tcpsecurity.com/?p=201

Uzantısı ?p=201 şeklindeki olan bir url mod_rewrite sayesinde aşağıdaki gibi düzenli bir şekle girebilmektedir.

http://www.tcpsecurity.com/apache/apache-mod_rewrite-kullanimi-ve-ayarlari.html

Mod_rewrite Özelliğini Kullanmak İçin Apache httpd.conf Ayarlarını Yapalım

.htaccess dosyasına ve URL Rewrite komutlarına geçmeden önce Apache’i ayarlarının bulunduğu httpd.conf dosyası içinde mod_rewrite modülünün yüklü olup olmadığını kontrol etmeliyiz.

Kullandığım sistem FreeBSD olduğundan bu sisteme göre anlatmak istiyorum fakat apache httpd.conf dosyası genelde tüm sistemlerde aynı olduğundan bir farklılık olacağını pek sanmıyorum.

Konsol üzerinde aşağıdaki verilen komutla modülün yüklü olup olmadığını görebiliriz. Diğer sistemlerde httpd.conf dosyasını herhangi bir editörle açarak modül aramasını yapabilirsiniz.

tcpsecurity# grep “mod_rewrite.so” /usr/local/etc/apache/httpd.conf
LoadModule rewrite_module libexec/apache22/mod_rewrite.so

Sistemimizde mod_rewrite modülü yüklü gözüküyor.Eğer modül satırı önünde # işareti varsa kaldıralım ve httpd.conf dosyasını kayıt ederek apache ‘yi yeniden başlatalım.

Yukarıdaki ayarları bitirdikten sonra apache httpd.conf dosyasının en altına yeni bir VirtualHost bölümü tanımlayarak web sayfası veya dökümanlarımızın bulunduğu klasör yolunu gösterelim.

NameVirtualHost 10.0.0.2

<VirtualHost 10.0.0.2>
DocumentRoot /var/tcpsecurity/www

<Directory “/var/tcpsecurity/www”>
Options All
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
<IfModule dir_module>
DirectoryIndex index.html docs.php
</IfModule>

</VirtualHost>

Önemli Not : Directory tagları içinde bulunan Options ve AllowOverride seçimi All şeklinde olmalı aksi halde mod_rewrite url yönlendirmesi çalışmaz.

Mod_Rewrite İçin .htaccess Dosyasının Görevi

.htaccess (Hypertext Access) Apache sunucusu tarafından kullanılan ve sunucu üzerinde dizin ve klasör bazlı birçok işlemi gerçekleştirebilen ayar dosyasıdır.Bu dosya yayınlanmak istenen klasör ve dizin içinde bulunmaktadır ve sunucuya gönderilen her istek ile birlikte dizinler en üstten başlayarak en alta kadar taranır.Herhangi bir dizinde .htaccess dosyası bulunmuyorsa üst dizinlerdeki ayarlar geçerli olur. Eğer hiçbir .htaccess dosyası yoksa sunucu için geçerli varsayılan ayarlar kullanılır.URL Rewrite komutları tüm sunucu genelinde kullanılmak
isteniyorsa sunucunun varsayılan ayarları arasına, sadece belirli dizin veya klasörler için kullanılmak isteniyorsa .htaccess dosyası içine yazılır.

Şimdi httpd.conf bölümünde VirtualHost içinde belirttiğimiz ” /var/tcpsecurity/www/ ” dizin yolu içine bir .htaccess dosyası oluşturarak aşağıda anlatılan URL Rewrite komutlarını .htaccess dosyasına içine yazalım.

URL Rewrite için Kullanılan Bazı Komutlar

RewriteEngine

” RewriteEngine on | off ” komutları Rewrite yazma motorunu açıp kapatabilmemizi sağlar. Apache ‘de URL Rewrite öntanımlı olarak kapalı gelmektedir bu özelliği kullanabilmek için açık duruma getirmeliyiz.

İlk olarak .htaccess dosyasına aşağıdaki satırı ekliyoruz

RewriteEngine on

RewriteRule

Yapmak istediğimiz url değişikliklerini ve yönlendirmelerini bu komut sayesinde yapabiliriz.

RewriteEngine on
RewriteRule ^eski_tcpsecurity.html$ yeni_tcpsecurity.html

Bu şekilde eski_tcpsecurity.html sayfasını açmaya çalıştığınızda yeni_tcpsecurity.html sayfasının açıldığını göreceksiniz.

RewriteCond

RewriteCond komutu ile değişik türde yönlendirmelerde yapabiliriz.

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^88\.95\.
RewriteRule ^eski_tcpsecurity.html$ yeni_tcpsecurity.html

Bu şekilde hazırlanmış bir .htaccess dosyası ip adresleri 88.95. ile başlayan ziyaretçileri eski_tcpsecurity.html yerine yeni_tcpsecurity.html sayfasına yönlendirecektir.

Wordpress için rewriterule yönlendirme örneğini şu şekilde yazabiliriz.

RewriteCond %{THE_REQUEST} dokuman.php
RewriteRule . http://www.tcpsecurity.com/dokumanlar [L]

Bu örnekte ise dokuman.php ‘ye gelen her istek Rewriterule ile belirttiğimiz http://www.tcpsecurity.com/dokumanlar adresine yönlendirilmektedir. Bu şekilde wp üzerinde eski linkleri yeni linklere yönlendirebiliriz.

Bu dökümanda Apache Mod_Rewrite modülünü ve bu modül için httpd.conf, .htaccess dosyaları içinde yapılan ayarları ve Rewrite komutlarını basitçe anlatmış oldum. Zaman bulduğum taktirde detaylı Rewrite kurallarını bu bölüme eklemeyi düşünüyorum.
Web Site Ziyaretçisinin Karşılaştığı Apache Kaynaklı Hatalar , Nedenleri ve Çözümleri 400 : Yapılan istek geçersiz – Bağlantıda yaşanan bir problem olabilir. – Bağlantı kontrol edilerek tekrar bağl
Apache Log Dosyasındaki ” Attempt to serve directory ” Hatası [error] [client ip ] Attempt to serve directory: /dizin/tcpsecurity.com/site-dizin httpd-error.log içinde yukarıdakine benzer bir ha
Apache ‘nin mod_rewrite özelliği web sayfalarında karşımıza çıkan karışık url uzantılarını düzenli bir yapıya sokmak ve url işlemlerini yönetmemizi sağlayan çok kullanışlı bir modüldür. Mod_rewrite sa