.htaccess (Hypertext Access), Apache web sunucusunda dizin bazlı yapılandırma yapmak için kullanılan özel bir dosyadır. Ana sunucu yapılandırmasına erişiminiz olmadığında bile URL yönlendirme, güvenlik ayarları, önbellekleme ve daha birçok işlemi bu dosya aracılığıyla kontrol edebilirsiniz.
.htaccess Dosyası Nedir?
.htaccess dosyası, bulunduğu dizin ve alt dizinler için geçerli olan bir yapılandırma dosyasıdır. Dosya adının başındaki nokta, Unix/Linux sistemlerde gizli dosya olduğunu belirtir. Her HTTP isteğinde Apache bu dosyayı okur ve içindeki kuralları uygular.
Önemli: Her istek sırasında okunduğu için, çok sayıda kural performansı etkileyebilir. Mümkünse yapılandırmaları ana httpd.conf dosyasında yapmak daha verimlidir.
mod_rewrite ve URL Yönlendirme
mod_rewrite modülü, URL'leri yeniden yazmak ve yönlendirmek için kullanılır. SEO dostu URL'ler oluşturmanın temelidir.
Temel Yönlendirmeler
# mod_rewrite'ı etkinleştir
RewriteEngine On
# HTTP'den HTTPS'ye yönlendirme
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www'den www olmayan versiyona yönlendirme
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
# Belirli bir sayfayı yönlendirme
Redirect 301 /eski-sayfa /yeni-sayfa
# Tüm trafiği tek bir dosyaya yönlendirme (SPA)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html [L]
SEO Dostu URL'ler
# urun.php?id=123 → /urun/123
RewriteRule ^urun/([0-9]+)$ urun.php?id=$1 [L,QSA]
# blog.php?slug=merhaba → /blog/merhaba
RewriteRule ^blog/([a-z0-9-]+)$ blog.php?slug=$1 [L,QSA]
# .php uzantısını gizle
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$ $1.php [L]
Güvenlik Başlıkları
HTTP güvenlik başlıkları, saldırılara karşı önemli bir savunma katmanı sağlar:
# XSS koruması
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
# Strict Transport Security (HSTS)
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Content Security Policy
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'"
# Referrer Policy
Header set Referrer-Policy "strict-origin-when-cross-origin"
# Permissions Policy
Header set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Önbellekleme (Caching)
Statik dosyaların önbelleğe alınması sayfa yükleme hızını önemli ölçüde artırır:
# mod_expires ile önbellekleme
<IfModule mod_expires.c>
ExpiresActive On
# Görseller: 1 yıl
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
# CSS ve JS: 1 ay
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
# HTML: önbellek yok
ExpiresByType text/html "access plus 0 seconds"
</IfModule>
# GZIP sıkıştırma
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
AddOutputFilterByType DEFLATE application/json image/svg+xml
</IfModule>
Özel Hata Sayfaları
# Özel hata sayfaları
ErrorDocument 404 /hata/404.html
ErrorDocument 403 /hata/403.html
ErrorDocument 500 /hata/500.html
Erişim Kontrolü
# Belirli dosyalara erişimi engelle
<FilesMatch ".(env|log|ini|conf)$">
Require all denied
</FilesMatch>
# .htaccess dosyasına erişimi engelle
<Files .htaccess>
Require all denied
</Files>
# Dizin listelemeyi kapat
Options -Indexes
# Belirli IP'lerden erişimi engelle
Require not ip 192.168.1.100
Sık Yapılan Hatalar
- RewriteEngine On unutmak: mod_rewrite kuralları bu satır olmadan çalışmaz.
- Sonsuz yönlendirme döngüsü: RewriteCond koşullarını dikkatli yazın; yönlendirme hedefi de kuralla eşleşiyorsa döngü oluşur.
- [L] bayrağını atlamak: [L] (Last) bayrağı olmadan sonraki kurallar da uygulanmaya devam eder.
- R=301 ve R=302 karışıklığı: 301 kalıcı, 302 geçici yönlendirmedir. SEO için fark büyüktür.
- Dosyayı yanlış dizine koymak: .htaccess yalnızca bulunduğu dizin ve alt dizinleri etkiler.
.htaccess kurallarınızı hızlıca oluşturmak mı istiyorsunuz? SiteScripti'nin .htaccess Oluşturucu ve Sunucu Yapılandırma araçlarıyla yönlendirme, güvenlik ve önbellekleme kurallarını kolayca yapılandırabilirsiniz.
Bu konuyla ilgili araçlarımızı da deneyin: Redirect Checker, Robots.txt Oluşturucu, Güvenlik Başlıkları Analiz