Htaccess ile neler yapılabilir?
- SEO dostu URL’ler oluşturabilme. site.com/post.php?postid=11 yerine site.com/post-icerik gibi
- Subdomain ya da dizin yönlendirmeleri. site.com girildiğinde www.site.com’a yönlendirme gibi
- “404 sayfa bulunamadı” gibi tüm hata sayfalarını istenilen yere yönlendirebilme. site.com/olmayan-sayfa-asdasd girildiğinde sizin belirlediğiniz bir sayfa açılabilir.
- Sitenizin tamamına ya da bir dizine sadece belirli bir IP’nin girebilmesini sağlayabilirsiniz. Siteniz yapım aşamasındayken sadece sizin girip diğerlerini yapım aşamasında sayfasına yönlendirebilirsiniz.
- Özel dizinlere erişim engelleme. Sadece include edilen php dosyalarının olduğu bir klasörün kullanıcılar tarafından girilmesini engelleyebilirsiniz.
- Bazı web servisi botlarının sitenizi taramasını engelleyebilirsiniz. Hoşunuza gitmeyen bir web arama motorunun ya da spam bir web servisinin sitenizi taramasını engelleyebilirsiniz.
- Özel dizinlerinizi şifreleyebilirsiniz. PHP ile bir dizin kontrol sistemi yazmaya uğraşmak yerine hemen bir kaç satır htaccess komutu ile istediğiniz dizine şifre ile girilmesini sağlayabilirsiniz.
- Resimlerinizin başka sitelerde görünmesini engelleyebilirsiniz. Başka sitelerde sizin sitenizdeki resimlerin gösterilmesini engelleyerek sunucunuzun bant genişliğin başka sitelerce harcanmasını önleyebilirsiniz. (bu yöntemin adı hotlink diye geçer)
- Ve bu yukarıda sayılanların haricinde bu yöntemleri bir arada kullanarak çok daha fazlasını yapabilirsiniz.
SEO ve kullanıcı dostu bağlantılar oluşturma
Seo ve kullanıcı dostu url kullanımı için iki adet yöntem mevcuttur. İlki GET yöntemi ile sayfa değerini almak , ikincisi ise “REQUEST_URI” kullanmak. Kullanım tercihi tamamen size kalmış , ikisi de aynı işi yapacaktır.İlk yöntem GET metodu ile yapmak
Öncelikle bir içerik sayfa.php‘miz olsun ve örnek amaçlı switch ile sayfaları tanımladığımızı varsayalım.if(!isset($_GET['sayfa'])) { // eğer boşsa anasayfa varsayalım. $sayfa = 'anasayfa'; } else { $sayfa = $_GET['sayfa']; } switch($sayfa) { case 'iletisim': echo '<h2>İletişim</h2>'; echo '<p>Bize bilgi@site.com adresinden ulaşın!</p>'; echo '<p><a href="/">Anasayfa</a></p>'; break; case 'hakkinda': echo '<h2>Hakkında</h2>'; echo '<p>19 yaşında web master harunalp.com</p>'; echo '<p><a href="/">Anasayfa</a></p>'; break; case 'anasayfa': echo '<h2>Sitemehoşgeldin!</h2>'; echo '<p><a href="harunalp.com/hakkinda">Hakkında</a><br/>'; echo '<a href="/iletisim">İletişim</a></p>'; break; default: // hiç birisi değilse 404 varsayalim echo '<h2>Bulunamadı!</h2>'; echo '<p>bu sayfa yok , yeni bir arama yapın.</p>'; }Şuan htaccess kullanmadan bu sayfamızı “sayfa.php, sayfa.php?sayfa=hakkinda, sayfa.php?sayfa=iletisim” şeklinde kullanabiliriz. Fakat bildiğiniz gibi bu kullanım kullanıcı dostu değil ve google için de pek etik olduğunu söyleyemeyiz. Bu url yapısını seo uyumlu yapmak için http://harunalp.com/seo-uyumlu-url-yapisi-olusturma-htaccess/ makalemi okuyabilirsiniz. Yine de burada nasıl bir yol izleneceğine değinelim. İlk olarak bir “.htaccess” dosyasına ihtiyacımız var. Ana dizine gelip bir .htaccess dosyası oluşuruyoruz. FTP gibi bir program kullanıyorsanız ve izin vermiyor ise normal bir metin belgesi açarak içerisine kodları yazdıktan sonra kaydedip öyle sunucunuza atabilirsiniz. .htaccess dosyamızın içindeki kodlar şu şekilde olmalı.
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ sayfa.php?sayfa=$1 [QSA,L]Bu kodla yaptığımız şeyi tanımlayacak olursak ; normalde kullanıcı siteadi.com/iletisim yada siteadi.com/hakkimda gibi sayfalara girmeye çalıştığında ana sayfaya yani sayfa.php ye dönecekti.Ama artık yukarıdaki kodlar sayesinde sayfa url’si bir bakıma arka planda “sayfa.php?sayfa=iletisim” şeklinde çalışır. Sadece url farklı ama iş bakımından aynı. Link sonundaki .php uzantısını kaldırmak isterseniz bu makalemi okumanızı tavsiye ederim.
İkinci yöntemi ise REQUEST_URI ile yapmak
Bu yöntem de diğer yöntem ile hemen hemen aynı. Tek fark $_GET[‘sayfa’] yerine $_SERVER[‘REQUEST_URI’] ile parametreyi almak. Fakat burada request uri ile alırsak “/” işaretini de veriyor.Bu değeri substr fonksiyonu ile kaldırıyoruz. Parametreyi aldığımız ilk beş satırı şu şekilde güncelleyebiliriz.$sayfa = substr($_SERVER['REQUEST_URI'], 1); // ilk "/" karakterini atlıyoruz. if(!empty($sayfa)) { //değer boş ise anasayfaya yönlendir $sayfa = 'anasayfa'; }.htaccess dosyamızda da bu yönteme özel bir satırlık değişiklik yapıyoruz.GET parametresi tanımladığımız kısmı siliyoruz ve yerine :
RewriteRule ^(.*)$ sayfa.php?sayfa=$1 [QSA,L] // yerine RewriteRule ^(.*)$ sayfa.php [L]
Subdomain ya da dizin yönlendirme
Bu işlem bu web sayfasında da mevcut. Siteye başına “www” koyarak da koymayarak da ulaşmak mümkün. web sitenize iki adresi yazarak da girilebiliyor haliyle google bunu iki ayrı domain gibi değerlendirebiliyor.Web sitenizin bu bakımdan popülerliği dağıtılmış oluyor.RewriteEngine On RewriteCond %{HTTP_HOST} harunalp.com[nc] RewriteRule (.*) //www.harunalp.com/$1 [R=301,L]Tam tersini de yapabilirsiniz.
RewriteEngine On RewriteCond %{HTTP_HOST} www.phpr.org [nc] RewriteRule (.*) http://phpr.org/$1 [R=301,L]Ek olarak dizin yönlendirme de oldukça basit. İki farklı seçenek var. Kalıcı yönlendirme yani 301 yönlendirmesi ve geçici yönlendirme yani 302 yönlendirmesi. Kalıcı yönlendirmede arama motorları eski indexleri yeni indexler ile değiştirirken 302 yönlendirmesinde ise sadece yeni url’ye girip indexleri tarar.
RewriteEngine On RewriteRule ^eski_adres$ /yeni_adres [R=301,L]
.htaccess ile Hata sayfalarını yönlendirme
Hata kodlarını biliriz , en yaygın olanı 404 yani sayfa bulunamadı hatasıdır.Buna ek olarak 403 hatası da giriş izni olmayan sayfalar için kullanılır. Yukarıda kullanıcı ve seo dostu url yapısın oluşturduk ve olmayan ya da yanlış bir sayfaya giren kullanıcı direk anasayfaya yönleneceğinden bu kullanımı yapmak gereksiz olacak. Yani direkt olarak 404.php yada 403.php sayfasına yönlendirmek yerine anasayfaya yönlendiriyoruz. Yinede kodları paylaşmakta fayda var.ErrorDocument 403 /403.html ErrorDocument 404 /404.html
.htaccess ile Belirli IP adresine izin verme/engelleme
Siteyi genel olarak tüm kullanıcılara engellemek ya da belirli klasör ve ip adreslerine göre engellemek mümkün. Bunu yapmak için hazırladığınız “.htaccess” dosyasını ilgili alt klasörün içerisine koymanız yeterli.deny from all #tüm kullanıcıların girişini engelle allow from 127.0.0.1 #bu ip adresine izin ver allow from 192.168.0.0/255 #ya da bu ip blokunun girmesine izin verEğer sadece tüm kullanıcıları engellemek istersen “deny from all” yazmak yeterli olacaktır.
.htaccess ile bazı bot ve web servislerinin erişimini engelleme
Sitenizde dolaşmasını istemediğiniz bot servislerini yada sunucunuzu yoran diğer botların gelmesini istemiyorsanız basit bir .htaccess kodu ile bunu yapabilirsiniz.Bazı mimlenmiş kötü amaçlı botları olduğu varsayılan botları detaylı bu adresten şekilde bulabilirsiniz. Ek olarak engelleme kodunu ve birkaç örnek paylaşmakta fayda var.RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] RewriteCond %{HTTP_USER_AGENT} ^Wget [OR] RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR] RewriteRule .* - [F]Aşağıdaki yöntem ile de sitenize mobilden girenleri algılayabilir ve mobil sitenize yönlendirilmesini sağlayabilirsiniz.
RewriteCond %{REQUEST_URI} !^/mobil_dizin/.*$ RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] RewriteRule ^(.*)$ /mobil_dizin/ [L,R=302]
.htaccess ile özel dizinleri şifreleme
Bu yöntemi uygulamak için önce basit bir şifre dosyası oluşturmamız gerekiyor. Dosyanın içerisine her satıra bir kullanıcı ekleyebilir ve her satırda “isim:şifre” şeklinde kullanıcı adı ve şifreleri tanımlayabiliriz. Şifre dosyamızın adını .htpasswd yapıp .htaccess dosyamızda belirteceğimiz bir yere yerleştiriyoruz. Sonrasında bu bilgiler ile şifrelemek istediğimizin dizinin içerisine aşağıdakileri yazıyoruz.AuthUserFile /dosya/dizini/.htpasswd AuthType Basic AuthName "Gizli Dizin"
İçeriklerin başka sitelerde kullanılmasını engelleme
Hotlink adıyla da bilinen bu yöntem ile resim , video , yazı gibi içeriklerin diğer sitelerde yayımlanmasını engelleyebilirsiniz. Böylece sunucunuzun bant genişliğinin başka siteler üzerinden harcanmasına engel oluyorsunuz.Bu yöntem ile bizden aldığı görüntüyü yayımlamak isteyen kişiye hotlink uyarı resmi gönderebiliriz.Bunun örnekleri imageshack.us’da mevcuttur.RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+.)?harunalp.com[NC] RewriteRule .*.(zip|mp3|avi|wmv|mpg|mpeg)$ //www.harunalp.com/hotlinkresim.jpg [R,NC,L]
Önemli Bazı Detaylar
Burada birçok .htaccess kodunda aynı satır tekrar etmekte.RewriteEngine on. Bu satırı her kod için tekrar yazmak zorunda değilsiniz. Sayfanın en başına bunu eklemeniz yeterli.Ayrıca birçok kod ve komut mevcut.Bunların yerleri önemli.Hangisini hangi sıraya koyduğunuza dikkat edin.İlk başta bir 404 sayfası verip ardından farklı bir seo url belirlemek yanlış olur. Bu hususlara dikkat ederseniz önce seo dostu url’nizi , ardından da hata yönlendirmesini çalıştırabilirsiniz. Parantez içlerinde kullanılan NC, L ve R harflerinin anlamları:- L: Last Bu tanımlanmadan önce ifade edilen kurallar bundan sonrakilere geçmemesini ve karışmamasını sağlar.
- R: Redirect Bu değer kullanılırsa browserda adres değişir, kullanılmazsa yönlendirme arkaplanda yapılır fakat kullanıcının girdiği URL aynı kalır.
- NC: No Case Büyük küçük harfe duyarsız davranır.
- QSA: Query String Append GET metodu ile yönlendirme yaptığımızda yönlendirilen yere sonuna eklenen GET parametrelerini de dahil eder.