.htacces ile Neler Yapılabilir ?
- SEO dostu kısa URL oluşturma : "site.com/sayfa.php?id=123" gibi uzun bir link "site.com/sayfa" haline dönüştürülebilr.
- Subdomain Yönlendirmesi (www Ekini Kaldırmak veya Eklemek) : site.com girildiğinde www.site.com'a yönlendirme veya tam tersi.
- 301 Yönlendirmeleri : Eski bir linki yeni adresine yönlendirme
- 404 Hata Sayfası Yönlendirmesi : Web sitesinde varolmayan bir link girildiğinde istenilen başka bir sayfaya yönlendirme.
- Siteye Belirli IP Girişlerinin Engellemesi : Site yapım aşamasında olduğu süre içerisinde, yalnızca siteyi yapan kişi siteyi görebilir ve diğer kullanıcılar yapım aşamasında sayfasına yönlendirilebilir.
- İstenilen Web Servisi Botlarının Siteyi Taramasını Engelleme : Spam bir web servisinin siteyi taraması engellenebilir.
- Mobil Girişleri Algılama ve Mobil Siteye Yönlendirme : Siteye giren mobil kullanıcıları algılayıp, mobil siteye yönlendirme.
- Özel Dizinleri/Klasörleri Şifreleme : PHP ile bir dizin kontrol sistemi oluşturmak yerine, birkaç satır .htaccess komutu ile istenilen bir dizine şifre ile girilmesini sağlayabilme.
- Hotlink (Site Görsellerinin Farklı Sitelerde Gösterilmesini Engelleme) : Farklı sitelerde, sahibi olunan sitenin resimlerinin gösterilmesini engelleyerek, sunucunun bant genişliğinin farklı sitelerce harcanmasını önleyebilme.
SEO Dostu Kısa URL Oluşturma
Bu yöntem .htaccess'in en çok kullanılan alanıdır. Sitenin bulunduğu ana dizine, ".htaccess" adında dosya oluşturun. Dosya adı sadece uzantıdan ibaret göründüğü için yüksek ihtimalle, FTP programınız veya işletim sisteminiz böyle bir dosya oluşturmanıza izin vermeyecektir. Bu yüzden yeni boş bir metin belgesi oluşturun. Farklı kaydet seçeneğine tıklayın ve "Tüm dosyalar" seçeneğini seçip dosy adına ".htaccess" yazarak dosyayı oluşturun. Dosya oluştuktan sonra notepad++ ile veya hangi derleyiciyi kullanıyorsanız o derleyici ile dosyayı açın ve için aşağıda verdiğim kodları girin.
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ sayfa.php?sayfa=$1 [QSA,L]
Site uzantıları "/sayfa.php?sayfa=" şeklinde karışık değilde /sayfa.php gibi sadece uzantıdan oluşuyorsa yukarıdaki kodun yerine aşağıdaki kodun girin:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]
Subdomain Yönlendirmesi (www Ekini Kaldırmak veya Eklemek)
Bu yöntemi bu blog üzerinde test edebilirsiniz. Tarayıcının adres satırına "www.masivaturk.com" adresini yazarak bloga girmeye çalıştığınızda sitede bulunan .htaccess dosyası sayesinde otomatik "masivaturk.com" adresine yönlendirileceksiniz. Bu yönlendirme kişinin kendi isteğine göre tam tersi olan "www." eki eklenerekte yapılabilir. Fakat bu yöntemi kullanmak sitenin arama motorları gözündeki sağlığı açısından zorunlu denilebilir. Bu yönlendirme yapılmadığı takdirde Google, siteyi "www" eki olan "www.masivaturk.com" ve "www" eki olmayan "masivaturk.com" halinde iki site gibi değerlendiriyor. Bunun zararı, site birçok yerde "www" eki alarak veya "www" eki almayarak paylaşılabilir. Bu eklerin olup olmaması yüzünden paylaşılan yerlerdeki siteleri arama motorları iki farklı siteymiş gibi algılayacağından dolayı SEO konusuunda ve domain popülerliği açısından dezavantajdır.
Aşağıdak kod .htaccess dosyasına eklendiği takdirde siteye www eki olmadan girilmesi durumunda, sitenin önüne "www" ekini ekleyerek kalıcı yönlendirme yapılıyor ve tüm ilgiler tek bir subdomain ve domainde toplanıyor.
RewriteCond %{HTTP_HOST} kandemir\.co [nc]
RewriteRule (.*) http://www.masivaturk.com/$1 [R=301,L]
Tam tersi yöntemde ise tarayıcının adres kısmına "www" eki girilse dahi, "www.masivaturk.com > masivaturk.com" gibi www eki olmayan domaine yönlendiriyor. Bu yöntemde aşağıdaki kod ile yapılabilir.
RewriteCond %{HTTP_HOST} ^www\.kandemir\.co [nc]
RewriteRule (.*) http://masivaturk.com/$1 [R=301,L]
301 Yönlendirmeleri
301 yönlendirmesi, var olan bir link değiştirildiğinde, ziyaretçi eski linki girse dahi onu yeni linke yönlendirmeye yarar.
Bu ne işe yarar ? Misal; "masivaturk.com/genel" linkinin, bir süre sonra "masivaturk.com/genel-kultur" olarak değiştirildiğini varsayalım. Fakat "masivaturk.com/genel" olan eski linkin google'da index aldığı ve güzel bir sıralama yakaladığı düşünülsün. Bu eski, "masivaturk.com/genel" linkine, 301 yönlendirmesi yapılmadığı takdirde, link artık var olmadığı için "masivaturk.com/genel" linkine girmek isteyen ziyaretçiler 404 hata sayfasına yönlendirilecektir. Bu da sitenin prestij kaybına yol açacaktır.
Diğer bir düşünceyle, "masivaturk.com/genel" olan eski link google'dan kaldırıldığında, yeni olan, "masivaturk.com/genel-kultur" linki, google'a henüz yeni eklendiği için google'da yakalanan sıra kaybedilecektir. Bu gibi sorunların önüne geçmek için siteler, değiştirilen linklere 301 yönlendirmesi yapmalıdır.
Yukarıda anlattıklarım yalnızca aynı alan adı içerisinde yönlendirmekle sınırlı değildir. İstenilen herhangi bir sayfa, istenilen herhangi farklı bir alan adındaki sayfaya da yönlendirme yapılabilir.
Aşağıdak kodda .htaccess dosyası ile, yukarıda vermiş olduğum örnekteki linkler arasında 301 yönlendirmesi yapılmıştır.
redirect 301 /genel http://masivaturk.com/genel-kultur
Yukarıdaki kodda bulunan "redirect 301" kısmı 301 yönlendirme kodunun başlangıcı, "/genel" kısmı eski link ve "http://masivaturk.com/genel-kultur" kısmı da yönlenecek olan yeni adrestir.
Ayrıca bakınız:
Tek bir web sitesini tamamen yönlendirmek için:
Redirect 301 / http://site.com
Tüm web sitesini, aynı sitedeki bir alt klasöre yönlendirmek için:
Redirect 301 / http://site.com/klasor-adi
Web sitesinin alt klasörünü, başka bir web sitesine yönlendirmek için:
Redirect 301 /klasor-adi http://site.com
Web sitesinin alt klasörünü, başka bir web sitesinin alt klasörüne yönlendirmek için:
Redirect 301 /klasor-adi http://site.com/klasor-adi
Web sitesinin alt klasörünü, başka bir web sitesinin alt klasörüne yönlendirmek için:
Redirect 301 /klasor-adi http://site.com/klasor-adi
404 Hata Sayfası Yönlendirmesi
Web sitelerinde sıklıkça görülen "404 Sayfa Bulunamadı" hatası, tıklanan sayfanın geçersiz olduğunu ve var olmadığını belirten bir hatadır. Misal, kullanıcı tarayıcı adres satırına "masivaturk.com/qwerty" yazıp sayfaya gitmek istediği düşünülsün. Fakat sitede böyle bir sayfa olmadığı için 404 hatası alacaktır. Bu gibi durumlarda bulunmayan sayfaya giden kullanıcıları belirlenen bir sayfaya yönlendirmek için .htaccess dosyasına bir satır eklemek gerekmektedir. Aşağıdaki kodu, .htaccess dosyasına ekleyerek 404 hata sayfası yönlendirmesi yapılabilirsiniz. Bu kodun, site açılışının hızlanması açısından .htaccess dosyasının en altına eklenmesi tavsiye edilir.
ErrorDocument 404 /404.php
404 hata yönlendirmeleri için ayrı bir yaratıcı 404 sayfa tasarımı yapabilir ve kullanıcıları bu sayfaya yönlendirerek ilgilerini çekebilirsiniz.
Siteye Belirli IP Girişlerinin Engellemesi
Tüm siteye IP engeli koyulabileceği gibi, sadece belirli klasörlere göre de IP erişim engeli koyulabilir. Bunun için, hazırlanan .htaccess dosyasının ilgili alt klasörün içerisine koyulması yeterlidir.
allow from 127.0.0.1 #Yalnızca bu IP adresinin girişine izin verir.
allow from 192.168.0.0/255 #Yalnızca bu IP blokunun girmesine izin verir.
İstenilen Web Servisi Botlarının Siteyi Taramasını Engelleme
İstenilmeyen, sitede çok fazla dolaşıp siteyi yoran botlar, htaccess yoluyla engellenip sunucu rahatlatılabilir.
Aşağıdaki beyaz renkli "Htaccess Zararlı Botlar" kutucuğuna tıklayıp, sürekli güncel olan, genel olarak kötü amaçlı olduğu düşünülen tüm botların, htaccess engelleme koduyla birlikte verilmiş listesine ulaşabilirsiniz. zararlı botlar listesine ulaşabilrsiniz.
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC Web Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^libghttp [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Missigua [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web Image Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule .* - [F]
Ben aşağıdaki koda örnek vermek amaçlı birkaç tanesini ekliyorum.
RewriteCond %{HTTP_USER_AGENT} Wget [OR]
RewriteCond %{HTTP_USER_AGENT} CherryPickerSE [OR]
RewriteCond %{HTTP_USER_AGENT} CherryPickerElite [OR]
RewriteCond %{HTTP_USER_AGENT} EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ExtractorPro
Mobil Girişleri Algılama ve Mobil Siteye Yönlendirme
Siteye giren mobil kullanıcıları algılayıp, bu kullanıcıları mobil siteye yönlendirme işi, aşağıda bulunn kodlar htaccess dosyasına eklenerek yapılabilir.
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /mobil_dizin/ [L,R=302]
Özel Dizinleri/Klasörleri Şifreleme
Bu yöntem için, şifrelemek istediğiniz klasörün içine ".htaccess" ve ".htpasswd" adında ayrı dosya oluşturun. Oluşturduğunuz ".htpasswd" dosyasının içine, "kullanıcı:şifre" şeklinde ve her satıra bir kullanıcı gelecek şekilde kullanıcı bilgileri girin. Daha sonra oluşturduğunuz diğer bir dosya olan ".htaccess" dosyasının içine aşağıdaki kodları girin.
AuthName "Şifre giriş ekranındaki açıklama kısmı"
AuthUserFile /home/ftp_kullanıcı_adı/public_html/gizli/.htpasswd #gizli adlı klasörün içinde bulunan .htpasswd dosyasının ftp yolu
require valid-user
Önemli Not: 3. satırda bulunan "AuthUserFile" kısmını, ".htpasswd dosyasının bulunduğu yeri, yukarıdaki örnekteki gibi ftp adresinizdeki yerine göre değiştirin. Aksi takdirde çalışmaz.
Buraya tıklayıp, oluşturduğum örnek şifreleme kısmını deneyebilirsiniz.
Kullanıcı Adı: kullanıcı
Şifre: şifre
Hotlink (Site Görsellerinin Farklı Sitelerde Gösterilmesini Engelleme)
Hotlink adı verilen bu yöntem ile sitenizde bulunan müzik, video ve görselleri başka sitelerde gösterilmesini engelliyor. Hotlink yöntemiyle sunucunuzun bant genişliğinin, farklı siteler üzerinden harcanması engellenmiş oluyor. Hotlink yönteminde, farklı bir siteden, sitenizde bulunan bir resim görüntülenmek istendiğinde, farklı siteye istenilen resim yerine, hotlink uyarı resmi gösterebilirsiniz.
Hotlink yöntemini kullanmak için aşağıdaki kodları .htaccess dosyasına ekleyin. Kod içerisinde bulunan site bilgilerini ve hotlink uyarı resmi göstermek istediğiniz görselin yolunu kendi sitenize göre değiştirin.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+\.)?site\.com[NC]
RewriteRule .*\.(jpg|png|jpeg|gif|zip|mp3|avi|wmv|mpg|mpeg)$ http://site.com/hotlink.jpg [R,NC,L]
Notlar
Yukarıda anlattığım kodların hepsinin başında "RewriteEngeine on" komutu var. "RewriteEngine On" komutu Rewrite yazma motorunun açılmasını sağlar. Bu yöntemlerden bir kaçını birlikte kullanmak istediğiniz takdirde, her defasında "RewriteEngeine on" komutunu eklemenize gerek yoktur. "RewriteEngeine on" komutunu .htaccess dosyasının en üst satırına bir kere eklemeniz yeterlidir.
Htaccess'te yorum satırı komutu # (diyez) işaretidir. # ifadesini ekleyip, devamında yalnızca sizin görebileceğiniz yorum satırları yazabilirsiniz.
Birden fazla komut kullanırken sıralamanın önemli olduğunu unutmayın. İlk önce 404 hata sayfası yönlendirme komutunu yazıp, ardından satırına SEO dostu kısa URL oluşturmaı komutlarını yazdığınız takdirde, ilk olarak 404 hata sayfa komutu tetikleneceği ve ilgili yere gideceği için SEO dostu bağlantı yöntemi çalışmaz.
[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. |
[OR] | : | veya |
Arkadaşım; http://www.site.com/mobile/deneme-sayfasi.html bağlantısını http://www.sitecom/deneme-sayfasi.html şeklinde nasıl ayarlayabiliriz? /mobile/ den sonraki bağlantılar değişken olacak. google bot bağlantı gönderirken bağlantıları /mobile/ ya da /m/ dizininde arıyor. Dolayısıyla sayfa 404 hatası veriyor. Saayfa response olduğu için moile gerek duymuyorum ama google ısrarla /mobile/ diye arıyor. WP Redirection eklentisi kullanııyorum. Bağlantıları tek tek yönlendirmek sıkıntı oluyor.
Robots.txt dosyası ile arama motorlarının /mobile veya /m klasörünü taramalarını engellemeyi deneyin.
Robots.txt dosyasının içeriği:
User-agent: *
Disallow: /mobile/
Disallow: /m/
Merhaba, htaccess voltran sistemi için tüm bilgilerin yer aldığı internette karşılaşılacak en iyi yazı dizisi diyebiliriz. İhtiyacı olanlarla buluşması dileğiyle. Web Tasarım Ajansı birNC olarak başarılı yazınızdan dolayı sizi kutluyoruz.
Kaleminiz hiç durmasın.
Değerli yorumunuz için teşekkür ederim. Web hayatınızda başarılar.
htaccess çok önemli bir dosya güvenlik ayarlarını kod ile ekliyordum ama WP security eklentisi ile direk panelden güvenlik ayarlarını kolaylıkla değişiklik yapabiliyorum.
İnternette 301 redirect konusunu pek çok site ele almış ama sizin kadar detaylı teknik olarak bilgilere az rastladım. Verdiğiniz faydalı bilgiler umarım benim gibi diğer arkadaşlarında çok işine yarayacaktır. .htaccess redirect 301 hakkındaki güzel paylaşımınız için teşekkürler hocam..
Yorumunuz için teşekkürler. İyi çalışmalar dilerim.