.htaccess dosyası NEDİR .htaccess dosyası ne işe yarar , .htaccess dosyası nasıl kullanılır . .htaccess dosyası içeriğinde olması gereken kodların hepsini sizlere verdik..
.htaccess dosyası ne işe yarar ve nerede konumlanır?
.htaccess, Apache tabanlı sunucularda “istek daha WordPress’e ulaşmadan” kuralların devreye girdiği yerin adıdır. Bu yüzden yönlendirme, erişim kısıtlama ve temel performans ayarları gibi kritik konular, tema/eklenti katmanına bulaşmadan doğrudan sunucu seviyesinde yönetilir. Ben işi oldum olası böyle severim: önce temeli sağlam kurarsın, sonra ince ayar yaparsın. Çünkü temeli sağlam olmayan sistem, üzerine ne eklersen ekle bir gün mutlaka patlar.
.htaccess Yönlendirme ve Güvenlik yaklaşımı tam da bu yüzden hâlâ en güvenilir yoldur: kalıcı taşıma (301), tek adres standardı (HTTPS + www/non-www), hassas dosyaları kilitleme ve gereksiz saldırı yüzeyini kapatma gibi işler “en alt katmanda” çözülür. Bir kez doğru kurarsan, yıllarca el değmeden çalışır.
Uygulama kuralı basit: Kuralı hangi alan adında uygulayacaksan, o alan adının yayın yaptığı dizindeki .htaccess’e yazarsın. WordPress olan bir yapıda genelde dosyada “BEGIN WordPress / END WordPress” bloğu bulunur. Özel kuralların çoğunu bu bloğun üstüne koymak daha sağlıklıdır; çünkü WordPress rewrite düzeni bazı durumlarda senin kuralını gölgeleyebilir. Ayrıca 301 yönlendirme tarayıcı tarafından cache’lenebilir; test ederken gizli sekme kullanmak ve birkaç farklı URL ile denemek alışkanlık olmalı.
Alan adı taşıma: wpeklenti.com.tr → datweb.com.tr (301, yol korumalı)
Alan adı taşıma işinde “yol korumalı 301” en temiz çözümdür. Yani eski sitedeki /iletisim, /blog/yazi-adi, /kategori/xyz gibi yollar yeni sitede aynı şekilde açılır. Bu hem kullanıcı deneyimini bozmadan taşınmayı sağlar hem de SEO tarafında “kırık link” problemini minimize eder. Burada hedefimiz tek hamlede temiz geçiştir: gereksiz zincirleme yönlendirme yok, döngü yok, karmaşa yok.
.htaccess Yönlendirme ve Güvenlik düzenini doğru kurmak için aşağıdaki kuralı wpeklenti.com.tr’nin kök dizinindeki .htaccess dosyasına ekle. Bu kural www’li ve www’süz geleni yakalar, sonra isteği datweb.com.tr’ye 301 ile taşır ve yolu korur.
RewriteEngine On
# wpeklenti.com.tr (www dahil) -> datweb.com.tr
# URL yolunu korur: /abc -> https://datweb.com.tr/abc
RewriteCond %{HTTP_HOST} ^(www\.)?wpeklenti\.com\.tr$ [NC]
RewriteRule ^(.*)$ https://datweb.com.tr/$1 [R=301,L]
Eğer datweb tarafında standart adresin www’li ise (örnek: https://www.datweb.com.tr), hedefi buna çevirmen gerekir. Aksi halde senin sistemin bir yandan www’ye, diğer yandan www’süze çekiştirir; bu da gereksiz yönlendirme zinciri demektir.
RewriteEngine On
# wpeklenti.com.tr (www dahil) -> www.datweb.com.tr
RewriteCond %{HTTP_HOST} ^(www\.)?wpeklenti\.com\.tr$ [NC]
RewriteRule ^(.*)$ https://www.datweb.com.tr/$1 [R=301,L]
Pratik test yöntemi: Ana sayfa + 2 farklı alt sayfa + 1 eski blog URL. Bir de bilerek olmayan bir URL dene (örnek /asdasd). Burada “sürekli yükleniyor” veya “çok fazla yönlendirme” görürsen döngü ihtimali vardır. Döngülerin ana sebebi şudur: aynı yönlendirme birden fazla yerde tanımlıdır veya hedef sitede de eski siteyi geri çağıran bir kural vardır. Böyle durumda en doğru yöntem eski usuldür: kuralları tek tek sadeleştir, test et, sonra bir sonraki adımı ekle.
HTTPS ve www/non-www standardı
Bir sitenin birden fazla adresten açılması, düzeni bozar. HTTP ve HTTPS birlikte açık kalırsa güvenlik zayıflar; www ve non-www birlikte kalırsa SEO tarafında “aynı içeriğin iki sürümü” gibi sorunlar oluşabilir. Bu yüzden tek bir standart seçilir ve diğer tüm varyasyonlar 301 ile o standarda taşınır. Kısa, net, tartışmasız.
.htaccess Yönlendirme ve Güvenlik uygulamasında önce HTTPS zorunlama yazılır. Bu kural HTTP ile gelen her isteği HTTPS’ye taşır. SSL sertifikası aktif olmalı; değilse önce onu çözmek gerekir.
RewriteEngine On
# HTTP -> HTTPS zorunla
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Ardından www standardı belirlenir. Hedefin www’süz ise (datweb.com.tr), www ile gelen istekleri www’süze indirgersin:
RewriteEngine On
# www -> non-www (tek standart)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Hedefin www’li ise (www.datweb.com.tr), tam tersini yaparsın:
RewriteEngine On
# non-www -> www (tek standart)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
Burada kritik nokta: Aynı anda iki kuralı da aktif etmeyeceksin. Bir standart seç, tek yön uygula. Ayrıca mümkünse HTTPS ve www kuralını “tek adımda” hedefe götürecek şekilde yaz; iki aşamalı yönlendirme küçük görünür ama hız ve tarama bütçesi açısından gereksizdir. Sağlam iş, sade iştir.
Temel güvenlik ve temel performans dosyaları kilitle, cache ve sıkıştırmayı aç
Güvenlikte “gereksiz kapıyı kapat” yaklaşımı eskidir ama hâlâ en etkili yaklaşımdır. WordPress’te wp-config.php ve .htaccess gibi dosyaların dışarıdan erişilebilir olması kabul edilemez. Aşağıdaki kurallarla bu dosyaları kilitlersin. Bu kurallarda < > işaretleri HTML’de bozulmasın diye kaçışlı yazılmıştır; sayfada kod olarak düzgün görünür.
# wp-config.php erişimini engelle
<Files wp-config.php>
Require all denied
</Files>
# .htaccess erişimini engelle
<Files .htaccess>
Require all denied
</Files>
Bir diğer yaygın risk, nokta ile başlayan gizli dosyaların (.env gibi) veya depo klasörlerinin (.git gibi) sızmasıdır. Birçok sitede bu dosyalar yanlışlıkla köke düşer. Aşağıdaki kural genel bir kalkan görevi görür:
# Nokta ile başlayan gizli dosyaları engelle
<IfModule mod_authz_core.c>
<FilesMatch "^\.+">
Require all denied
</FilesMatch>
</IfModule>
XML-RPC konusu ise yıllardır aynı hikâye: çoğu site için gereksiz, saldırılar için sık hedef. Kullanmadığından eminsen kapatmak mantıklıdır:
# xmlrpc.php erişimini engelle
<Files xmlrpc.php>
Require all denied
</Files>
Performans tarafında “temel ama sağlam” iki hamle vardır: tarayıcı cache ve sıkıştırma. Statik dosyalar (görsel, CSS, JS) uzun süre cache’lenirse tekrar tekrar indirilmez. Bu, sayfa açılışlarını gözle görülür şekilde rahatlatır. Aşağıdaki kural mod_expires aktifse çalışır, değilse etkisiz kalır ama siteyi bozmaz:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresDefault "access plus 7 days"
</IfModule>
Sıkıştırma (mod_deflate) da metin tabanlı içeriklerin boyutunu düşürür. Yani HTML, CSS ve JS daha küçük taşınır. Bu kural da modül varsa çalışır, yoksa sorun çıkarmaz:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/javascript
</IfModule>
Son olarak dizin listelemeyi kapatmak, “küçük ama doğru” bir güvenlik hamlesidir. Bazı sunucular klasör içeriğini listeleyebilir; bu gereksiz risktir:
Options -Indexes
Bu temel kurallarla taşınma ve standardizasyon tamamlanır, riskli dosyalar kilitlenir, temel hız iyileştirmeleri yapılır. Benim sevdiğim düzen budur: önce sağlam iskelet, sonra ayrıntı. .htaccess Yönlendirme ve Güvenlik kurulumunu böyle yaptığında, hem bugünkü sorunlarını çözersin hem de yarın bir gün site büyüdüğünde “neden en başta doğru yapmadım” diye kendine söylenmezsin.
Kural koyarken hedefin net olacak: tek doğru adres, tek yönlendirme mantığı, minimum zincirleme, maksimum sadelik. İşin geleneği de budur; yenilik bile bu disiplinin üstüne kurulunca gerçekten işe yarar. .htaccess Yönlendirme ve Güvenlik yaklaşımını standarda bağladın mı, altyapın artık daha düzenli ve daha yönetilebilir olur.