Php .htaccess Kullanımı

Php ile bir web sitesi yazılıyorsa elbette .htaccess kullanımına da gerek duyuluyordur. Bunun ilk ve en önemli nedeni kullanıcı dostu url yapısı oluşturma. Bazı yönlendirmeleri de bu dosyamızın içerisinde belirleyeceğiz. .htaccess dosyası ile SEO ve kullanıcı dostu bağlantılar oluşturma ,Subdomain ya da dizin yönlendirme , Hata sayfalarını yönlendirme , Belirli IP adresine izin verme/engelleme , Bazı bot ve web servislerinin erişimini engellemek ,Özel dizinleri şifrelemek , İçeriklerin başka sitelerde kullanılmasını engelleyebilir ve daha fazlasını yapabilirsiniz.

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.

Yukarıda bizlere .htaccess kullanımıyla vaat edilenleri sırasıyla gerçekleştirelim.

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 [email protected] 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="www.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 https://www.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 ver

Eğ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.

Bu harflerin detaylarını ve daha fazlasını bu adreste bulabilirsiniz.

AuthorHarun ALP

Bu adam , bilgi sahibi olduğu konularda makalelerini daha bilgilendirici hale getirip görseller ile süslüyor ve seo uyumlu makaleler ortaya çıkarıyor. Güncel webmaster konularını işlemekten keyif alıyor ve genelde her makale aslında bir sorunun çözümü niteliğinde.

2 thoughts on “Php .htaccess Kullanımı

  1. Merhabalar. Öncelikle bu güzel paylaşım için teşekkür ederim. Sormak istediğim bir şey var. htaccess ile uzantıları attığımda get parametrelerini get metoduyla çekemiyorum. Sebebi ne olabilir acaba? yardımlarınız rica olunur.

    • Çekebilmen lazım, normalde url ne ise htaccess kodlarından bir şeyi değiştirsen bile o url yeni haliyle de eski saf haliyle de çalışır.Kodları atmazsan yapabileceğim yorum bu kadar olur. Kodunu da paylaş bakalım ona göre yorum yapabilelim 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir