.htaccess dosyası, web sitenizi ve müşteri deneyiminizi iyileştirmeniz gerektiğinde oldukça kullanışlıdır. Üstelik web sitenizin taranabilir ve dizine eklenebilir olmasını sağlayıp hızlı bir şekilde yüklenmesine yardımcı olarak SEO çalışmalarınızı da destekler. Bu yazımda .htaccess dosyasının nasıl çalıştığını, nasıl kullanılacağını ve SEO için neden önemli olduğunu anlatacağım.
.htaccess Dosyası Nedir?
.htaccess dosyası, Apache web sunucuları için kullanılan bir konfigürasyon dosyasıdır. Bu dosya, web sunucusunda belirli bir dizindeki web sayfalarının davranışlarını ve özelliklerini değiştirmek için kullanılır.
.htaccess dosyası, web sayfasının erişim izinlerini, yönlendirmeleri, önbellekleme kurallarını, gzip sıkıştırma gibi performans optimizasyonlarını ve diğer birçok özelliği yapılandırmaya izin verir. Bu dosya, genellikle WordPress gibi popüler CMS’ler tarafından kullanılır ve kullanıcıların web sitesinin davranışlarını yönetmelerine izin verir. Ancak .htaccess dosyası yanlış yapılandırıldığında web sitesinin düzgün çalışmasını engelleyebilir veya güvenlik açıkları oluşturabilir, bu nedenle dikkatli bir şekilde kullanılması önemlidir.
Bu çok yönlü dosyanın kullanım örneklerini incelemeden önce, .htaccess’in sözdizimini ve yapısını inceleyelim. Muhtemelen bunu daha önce görmüş olabilirsiniz. Normal bir WordPress web sitesinde.htaccess dosyasının varsayılan yapılandırması aşağıdaki gibidir:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
.htaccess’teki kod sırasının önemlidir. Her adımın, bir şeyi yürütmek istediğiniz sıraya dikkatlice yerleştirilmesi gerekir. Şimdi kodu satır satır inceleyelim:
- RewriteEngine On: Bu kod satırı, verilen site için Apache’den gelen yeniden yazma motorunun açık olmasını sağlar. Bu motoru açmanın başka bir yolu da sunucu düzeyindedir. Bunu global conf dosyası httpd.conf’ta ayarlayabilirsiniz. Motor sunucu düzeyinde ayarlanmışsa burada komutu tekrarlamanız gerekmez.
- RewriteBase /: Daha sonraki bir aşamada yeniden yazma kurallarının ne zaman oluşturulması gerektiği için bir temel belirlemenizi sağlar. Göreceli yolları kullanabilmek için bir taban belirlemek gereklidir. Buradaki / karakteri, web sitesi için dosyaların bulunduğu belgenin kökünü belirtir. Örneğin; abc diye bir web sitemiz varsa /, https://www.abcxyz.com/ ile aynı anlama gelir.
- RewriteRule ^index\.php$ – [L]: Yeniden yazma kurallarına sahip olmanın sınırı yoktur. Bu kurallar, yeniden yazma işlemi için omurga görevi görür. Neredeyse sonsuz sayıda kurala sahip olabilirsiniz. Bu kurallar, söz konusu web sitesindeki her sayfa görüntüleme sırasında birden çok kez kontrol edilir. Yeniden yazma kuralı sözdizimi RewriteRule Pattern Target/Substitution [Flag1, Flag2, Flag3] şeklindedir. Burada ^index\.php$, bir grup diziyi bulmaya yardımcı olan bir ifadedir. ^, bir dizenin başlangıcını sembolize eder. Benzer şekilde aynı dizenin sonunu işaretlemek için $ kullanılır. İçinde nokta olan dizeler için ^ yerine / sembolünü kullanabilirsiniz. Bu durumda bu kod satırı, index.php için olacak tek bir tam eşleşme sağlar. Buradaki – hedefi görüntülemek için kullanılır. -, bu kod satırında herhangi bir yer değiştirme olmadığını belirtir. [L], kuralları işlemeyi durdurmayı isteyen bir etiket görevi görür.
- RewriteCond %{REQUEST_FILENAME} !-f: RewriteCond, “Yeniden Yazma Koşulları” anlamına gelir. Bu koşulları izleyen yeniden yazma kurallarından etkilenen istekleri kısıtlamak için kullanılır. Yeniden yazma koşulları için söz dizimi RewriteCond Teststring Condition [Flag1, Flag2, Flag3] şeklindedir. Birden fazla koşul, başka herhangi bir kuralın uygulanmasından önce hepsinin doğru olmasını zorunlu kılar. Buradaki kod durumunda, koşul !-f’dir. -f “normal dosyadır” anlamına gelir. Teststring’in geçerli bir dosya olup olmadığını kontrol eder. ! “değil” anlamına gelir. Bu nedenle burada bu satır, Teststring’in geçerli bir dosya olup olmadığını kontrol eder. Bu kod satırının arkasındaki fikir, çeşitli yeniden yazma kurallarını yakalamak ve tanımlamaktır. Sunucunun 404 hatası döndürmesini istemiyorsanız bu kod satırı kalıcı bağlantıları işler.
- RewriteCond %{REQUEST_FILENAME} !-d: !-d ifadesi, bir dosyanın geçerli olup olmadığını kontrol etmek yerine erişilen dizinin geçerli olup olmadığını kontrol eder. Yalnızca net bir eşleşme, sıradaki bir sonraki kuralın işlenmesine yol açar.
RewriteRule . /index.php [L]: Kod tüm koşulları sağlandığında bu kural kullanılır. Bir kullanıcı, başlangıçta mevcut olmayan herhangi bir web sitesinde herhangi bir şeye erişmeye çalıştığında kullanılır. Nokta, satır sonu dışında herhangi bir karakteri belirtir. Bu durumda hedef /index.php’dir. [L], takip edebilecek herhangi bir kuralın işlenmesini durdurur.
.htaccess Dosyasının Önemi
.htaccess dosyası, bir web sitesinin davranışlarını yönetmek için kullanılır ve bir dizi faydalı özellik sunar. Bu özellikler arasında aşağıdakiler bulunur:
- Erişim İzinleri: .htaccess dosyası, belirli IP adresleri veya IP adresi aralıkları tarafından erişilebilirliği kontrol etmek için kullanılabilir. Bu, web sitesinin güvenliğini artırabilir ve spam botlarından veya kötü amaçlı kullanıcılardan koruyabilir.
- Yönlendirme: .htaccess dosyası, bir URL’in başka bir URL’e yönlendirilmesi için kullanılabilir. Bu, web sitesinin arama motorlarındaki konumunu iyileştirebilir ve kullanıcı deneyimini geliştirebilir.
- Performans Optimizasyonu: .htaccess dosyası, web sitesinin hızını artırmak için kullanılabilir. Örneğin; cache veya gzip sıkıştırma kullanarak sayfa yükleme süresini azaltabilir.
- 404 Sayfaları: .htaccess dosyası, belirli hatalar meydana geldiğinde kullanıcılara özel bir 404 sayfası gösterilmesini sağlayabilir. Bu, kullanıcı deneyimini iyileştirebilir ve kullanıcıların web sitesinin işleyişine dair daha fazla bilgi edinmelerini sağlayabilir.
Bu nedenlerden dolayı .htaccess dosyası bir web sitesinin yönetiminde önemli bir rol oynar. Ancak yanlış yapılandırıldığında veya kötü amaçlı kullanıldığında güvenlik açıkları oluşturabilir ve web sitesinin işleyişini engelleyebilir. Bu nedenle .htaccess dosyasını yalnızca ihtiyaç duyulan özellikleri etkinleştirmek için dikkatli bir şekilde kullanmak gerekir.
.htaccess Dosyası Nerede Bulunur?
Apache’nin bu dosyaları gizli tutan varsayılan bir yapılandırması olduğundan .htaccess dosyasını kolayca göremezsiniz. Bu dosyaların gizli tutulmasının nedeni ise içlerinde sakladıkları içeriklerdir. Bu dosyalar, önemli yapılandırma bilgileri içerdiklerinden, bir web sunucusunun güvenliği için çok önemlidir. Güvenliğini sağlamadaki herhangi bir eksiklik, tüm sunucunun tehlikeye atılmasına neden olabilir. Bununla birlikte belirli bir web sitesinin .htaccess dosyası genellikle public_html klasöründe bulunur.
.htaccess Dosyası Ne İçin Kullanılır?
1. Yönlendirme
Web sitenizin domainini mi değiştirdiniz? .htaccess dosyanız ile bir yönlendirme yapabilirsiniz. Dosyanıza bu yönergeyi eklemek, trafiğinizi yeni domaininize yönlendirmenize yardımcı olacaktır. Ayrıca web sitenizdeki URL’ler söz konusu olduğunda aynı şeyi yapabilirsiniz. Bir 301 yönlendirme yönergesi oluşturarak, eski bir URL’e erişmeye çalışan kullanıcılarınızı ve arama motoru botlarını sitenizdeki yeni bir sayfaya yönlendirebilirsiniz.
Örneğin; .htaccess ile domaininizi şu şekilde yönlendirebilirsiniz:
# This allows you to redirect your entire website to any other domain
Redirect 301 / http://example.com/
Eğer sitenizde bulunan herhangi bir URL’i yönlendirmek isterseniz dosyanıza aşağıdaki gibi bir satır girebilirsiniz:
RedirectMatch 301 ^/old-url.html$ /new-url.html
2. SEO Uyumlu URL Üretimi
.htaccess’i kullanarak web siteniz için uygun URL yapısını ayarlayabilirsiniz. Buna ek olarak URL’inizle birlikte gelen herhangi bir uzantı (Örneğin; .html veya .php) .htaccess ile kolayca kaldırılabilir.
URL’deki .php uzantısını kaldırmak için;
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
satırlarını girebilirsiniz.
URL’deki .html uzantısını kaldırmak için ise;
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
satırlarını girebilirsiniz.
Bunun yanı sıra URL’lerinizi küçük harf yapmak için;
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . ${lc:%{REQUEST_URI}} [R=301,L]
satırlarını girebilirsiniz. Ancak bu kod, alan adı da dahil olmak üzere tüm URL yapılarını etkiler.
Son olarak dinamik URL’ler için;
RewriteEngine On
RewriteRule /(.*)/(.*)/$ page.php?category=$1&product=$2
satırlarını girebilirsiniz.
3. Site Hızı Optimizasyonu
Google, kullanıcıların üst sıralarda yer alan sayfalarda kötü bir kullanıcı deneyimi yaşamasını istemez. Ek olarak yavaş yüklenen bir web sitesi çok fazla tarama bütçesi tüketir. Web sitesinin hızını artırmanın en kolay yollarından biri .htaccess dosyanızı yapılandırmaktır.
4. Cache (Önbellek) Aktifleştirmesi
.htaccess dosyasındaki önbellek özelliğini etkinleştirirseniz web sitenizin kaynakları, ziyaretçinin tarayıcısında depolanır ve siteniz daha hızlı bir şekilde yüklenir. Bu aşamada iki farklı yöntem kullanarak önbelleği etkinleştirebilirsiniz.
1. ExperiesByType: .htaccess’te bu yöntemi kullanarak, web sitenizdeki her kaynak için bir önbellek zaman çerçevesi, yani son kullanma tarihi ayarlayabilirsiniz. Örneğin;
<ifModule mod_headers.c>
# YEAR
<FilesMatch “.(ico|gif|jpg|jpeg|png|flv|pdf)$”>
Header set Cache-Control “max-age=29030400”
</FilesMatch>
# WEEK
<FilesMatch “.(js|css|swf)$”>
Header set Cache-Control “max-age=604800”
</FilesMatch>
# 45 MIN
<FilesMatch “.(html|htm|txt)$”>
Header set Cache-Control “max-age=2700”
</FilesMatch>
</ifModule>
2. Cache Control Header: Bu yöntem, kaynakların süresi dolmadan önce maksimum süreyi kullanır. Örneğin;
# One month for most static assets
<filesMatch “.(css|jpg|jpeg|png|gif|js|ico)$”>
Header set Cache-Control “max-age=2628000, public”
</filesMatch>
5. Gzip Sıkıştırma
Bir web sitesinin yavaş yüklenmesinin en önemli nedeni, kaynaklarının boyutudur. .htaccess dosyanızda gzip’i etkinleştirirseniz tarayıcıya veri gönderirken görüntü boyutunu, dosya boyutunu ve dosya miktarını azaltabilirsiniz. Bunun için aşağıdaki satırları yazabilirsiniz:
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
6. Tarama ve İndeks Optimizasyonu
Arama motorlarının web sitenizi taramasına ve dizine eklemesine izin vermek veya vermemek için robot.txt dosyasını zaten kullanıyor olabilirsiniz. Ancak sitenizde sayfalardan başka kaynaklara sahip olmanız da mümkündür. Bu gibi durumlarda robot.txt çalışmayabilir.
PFD veya Word Belgesi gibi birkaç kaynağın dizine eklenmemesini istiyorsanız bunu yapmanın en iyi yolu, .htaccess dosyanızda bir X-robots etiketi ayarlamaktır. Örneğin;
<FilesMatch “.(docx|pdf)$”>
Header add X-robots-tag “noindex, noarchive, nosnippet”
</FilesMatch>
Bu durumda .doc ve .pdf uzantılı her dosya noindex, noarchive, nosnippet olarak değerlendirilecektir.
7. 404 Sayfası Oluşturma
Web sitenizde 404 hatası görüntüleniyorsa size özel bir 404 sayfası daha profesyonel görünebilir ve kullanıcılar için daha iyi bir deneyim sağlayabilir. Bunun için ilk olarak bir web sayfası oluşturmanız ve kodu .htaccess dosyanıza yüklemeniz gerekir:
ErrorDocument 404 /error/pagenotfound.html
Ardından sayfanın konumunu 404 sayfası konumuyla değiştirebilirsiniz.
8. HTTP’i HTTPS’e Zorlama
HTTPS kullanmak, tarayıcı ile web siteniz arasındaki iletişimi şifreler. HTTPS, web sitenizde hassas bilgiler olsun ya da olmasın veri yüklemek için tercih edilen yoldur. Tüm görüntüleyenlerin web sitenizi HTTPS üzerinden güvenli bir şekilde yüklemesini sağlamak için tarayıcılarını her zaman SSL sertifikasını kullanmaya zorlayabilirsiniz.
RewriteEngine modülü açık olduğu sürece .htaccess dosyanızı kullanarak HTTPS’yi zorlayabilirsiniz. Daha sonra aşağıdaki kodu eklemeniz gerekecektir:
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [OR,NC]RewriteCond %{https} off
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L]
9. IP Adresi Engelleme
.htaccess dosyanızla belirli IP adreslerini yönetmek için erişimi kısıtlamanız gereken dizinlerdeki dosyanıza bu kuralı ekleyebilirsiniz:
Require all granted
Require not ip 100.0.1.0
Birden fazla IP adresini engellemeniz gerekiyorsa “Require not” seçeneğini kullanarak ek satırlar ekleyebilirsiniz.
Require not ip 100.0.2.0
Require not ip 109.9.0.1
Ayrıca IP adresi yerine domain girerek bu domainlerin web sitenize erişmesini de engelleyebilirsiniz:
Require not host blockeddomain.com
.htaccess Dosyası Oluşturma
.htaccess dosyası oluşturmak oldukça basittir. İşlem aşağıdaki adımlarla gerçekleştirilebilir:
- Bir metin dosyası açın ve yeni bir belge oluşturun.
- Dosya adını “.htaccess” olarak kaydedin. Dosya adının önündeki nokta (.) dosyanın gizli bir dosya olarak kabul edilmesini sağlar.
- Dosyayı doğru klasöre yükleyin. .htaccess dosyası, yapılandırılmak istenen dizinde bulunmalıdır. Örneğin; dosya yüklemek istediğiniz dizin “/public_html” ise dosyayı bu dizine yükleyin.
- .htaccess dosyasını yapılandırmak için metin dosyasını açın ve gereken yapılandırmaları yapın.
Örneğin; aşağıdaki kod bir .htaccess dosyasının içine eklenerek URL’in yönlendirilmesini sağlayabilir:
RewriteEngine On
RewriteRule ^eski-URL$ /yeni-URL [R=301,L]
Yukarıdaki kod “eski-URL” adresini “yeni-URL” adresine yönlendirecektir. Bu, web sayfanızdaki bağlantıların doğru şekilde çalışmasını sağlayabilir.