Hakkında Künye

Apache mod_rewrite II

E-begimizin Ocak 2009 sayısında yayınlanan Apache mod_rewrite isimli yazımızda apache'nin mod_rewrite isimli modülünün nasıl kullanılacağıyla ilgili bilgiler vermiştik. Bu yazımızda da bu bilgileri gerçek hayatta nasıl kullanabileceğimizi örneklerle göreceğiz.

1- www ve Taklit İçerik (Duplicate Content) Problemi

Bazı web sitelerine hem http://www.websiteniz.com adresiyle hem de http://websiteniz.com adresiyle ulaşmak mümkündür. Ancak bu durumda Google gibi arama motorlarında bu iki adres iki farklı web sitesi gibi görülmektedir. Aslında aynı web sitesi olduğundan dolayı taklit olarak değerlendirilir. Bu problemden kurtulmak için .htaccess dosyasına:

RewriteCond %{HTTP_HOST} ^([a-z.]+)?websiteniz\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%1websiteniz.com/ [R=301,L]

satırlarını ekliyoruz. Bu durumda sitenize websiteniz.com adresini kullanarak girenler www.websiteniz.com adresine yönlendirilecektir. Benzer şekilde altalanadi.websiteniz.com adresini kullanarak girenler de www.altalanadi.websiteniz.com adresine yönlendirileceklerdir. Bu yönlendirmenin "301 Moved Permanently" yönlendirme başlığıyla yapılması da arama motorlarının www ile başlamayan sayfaların bilgileri tutmayıp yalnızca www ile başlayan sayfaların bilgilerini tutmasını sağlıyor.

Yukarıdaki komutların yerine

RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?websiteniz\.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]

komutlarını kullanırsak da tam tersini yapmış oluruz. Yani sitenize www ile başlayan alan adınızla girildiğinde www ile başlamayan alan adınıza yönlendirme yapılacaktır.

2- Resimler ve Bant Genişliği Problemi (Hotlink Problemi)

 


Web sitenizde kullandığınız resimler başka web sitelerinde direk olarak kullanılıyor olabilir. Böyle bir durumda o web siteleri açıldığında görüntülenen web siteleri her açıldığında sizin sunucunuzdan dosya istenecek ve onların değil sizin sunucunuzun bant genişliği kullanılacaktır. Bu problemden kurtulmak için .htaccess dosyasına:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?websiteniz\.com/ [NC]
RewriteRule \.(gif|jpg|png)$ - [F]

satırlarını eklersek uzantıları .gif, .jpg, .png olan dosyalar yalnızca direk açıldıklarında (ilk koşul) ya da sizin web sitenizde kullanıldıklarında (2. koşul) görüntüleneceklerdir. Dosya uzantılarını diğer resim biçimlerine ve hatta diğer dosya biçimlerine de erişimi kısıtlayacak şekilde düzenleyebiliriz.

Hayal gücümüzü biraz daha çalıştıralım ve resim dosyalarımızı kullanmaya çalıştıklarında karşılarına başka bir resim çıkarmayı istediğimizi düşünelim. Bu durumda yukarıdaki kod yerine:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?websiteniz\.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ http://www.websiteniz.com/yeniresim.jpg [R=301,L]

yazdığımızda resimlerimizi kullanan web siteleri kullandıkları(nı zannettikleri) resimleri değil de yeniresim.jpg'yi görecekler.

Eğer bütün web sitelerini engellemek değil de yalnızca belirli web sitelerini engellemek istersek:

RewriteCond %{HTTP_REFERER} ^http://(www\.)?engellisite\.com/ [NC]
RewriteRule \.(gif|jpg|png)$ - [F]

satırlarını ekleyebiliriz. Web sitesi adresini engellemek yerine {REMOTE_ADDR} kullanarak belirli IP'leri de engelleyebiliriz.

3- Bulunamayan Dosya ve Klasörler

Web sitenizde bulunmayan bir dosya ya da klasöre erişilmeye çalışıldığında gösterilmek üzere bir dosya hazırladıysanız yönlendirme işini mod_rewrite'a bırakabilirsiniz.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /404.php [L]

satırlarını eklediğinizde bulunamayan dosyalar (!-f) ve klasörler (!-d) 404.php adresine yönlendirilecektir. Eğer 404.php dosyasının içerisinde hangi dosyanın ya da klasörün bulunamadığıyla ilgili bir bilgiye  ihtiyaç varsa son satır

RewriteRule ^/?(.*)$ /404.php?url=$1 [L]

olarak değiştirilebilir.

4- Klasörlerin Yeniden Adlandırılması

Eğer bir klasörünüzü yeniden adlandırdıysanız eski adrese gelenleri

RewriteRule ^/?eskiklasor/([a-z/.]+)$ yeniklasor/$1 [R=301,L]

komutunu .htaccess dosyasına ekleyerek yeni adrese yönlendirebilirsiniz.

5- Dosyaların uzantılarının yenilenmesi

Tabiri caizse eski stil web tasarımdan yeni stil dinamik web tasarıma geçen herkesin çektiği bir sıkındı vardır. .htm ya da .html uzantılı dosyaların çoğu .php ya da benzeri şekillere bürünmüştür. Bu durumda kullanıcıların yerimlerindeki linklerin çoğu çalışmamaktadır. Bu problemi çözmek için:

RewriteRule ^/?([a-z/]+)\.html$ $1.php [L]

satırlarını .htaccess dosyasına eklememiz gerekiyor. Bu kodu eklediğimizde eski linkler çalışır durumda olacak ve kullanıcı adreste herhangi bir değişiklik görmeyecektir. Eğer kullanıcının da bu değişiklikten haberdar olmasını istersek komutu

RewriteRule ^/?([a-z/]+)\.html$ $1.php [R=301,L]

şeklinde değiştirebiliriz.

6- Dosyaların uzantılarını gizlemek

Web sitenizdeki dosyaların uzantılarını gizlemek ve daha akılda kalıcı bir hale getirmek için yapmanız gereken tek şey

RewriteRule ^/?([a-z]+)$ $1.php [L]

satırını eklemek. Ancak eğer dosyalarınız arasında yalnızca php uzantılı değil de html gibi farklı uzantıda dosyalar varsa

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.html [L]

satırlarını eklemek derdinize derman olacaktır.

E-bergi'yle ilerki makalelerde yine birlikte olmak üzere...



Kazım Buğra Tombul
- 3 -