Apache .htaccess ile Yönlendirme Güvenlik ve Optimizasyon
.htaccess Apache için dizin bazlı yapılandırma sağlar. Yönlendirme, HTTPS zorlama, güvenlik ve cache kuralları içerir.
.htaccess Nedir?
Apache web sunucusunda .htaccess (hypertext access) dosyası, ana sunucu yapılandırmasını değiştirmeden belirli bir dizin ve alt dizinler için özel yapılandırma kuralları belirlemenizi sağlayan güçlü bir direktif dosyasıdır. Dosya adı nokta ile başladığından Linux sistemlerinde varsayılan olarak gizlidir.
.htaccess dosyası sayesinde hosting hesabınıza root erişimi olmadan bile; URL yönlendirmeleri, erişim kısıtlamaları, özel hata sayfaları, MIME türleri, gzip sıkıştırma, tarayıcı önbelleği ve güvenlik başlıkları gibi pek çok konfigürasyonu uygulayabilirsiniz. WordPress, Joomla, Drupal gibi CMS sistemleri de düzgün çalışmak için .htaccess dosyasına ihtiyaç duyar.
Önemli: .htaccess kullanımı için Apache'de AllowOverride All direktifinin aktif olması gerekir. Aksi takdirde kurallar yok sayılır.
# /etc/apache2/sites-available/example.conf içinde:
AllowOverride All
Temel .htaccess Kuralları
1. URL Yönlendirme (Redirect)
Kalıcı yönlendirme (301 - SEO açısından önemli):
# Eski URL'den yeni URL'ye 301 yönlendirme:
Redirect 301 /eski-sayfa /yeni-sayfa
# Tam domain yönlendirme:
Redirect 301 / https://www.yenidomain.com/
# RewriteRule ile dinamik yönlendirme:
RewriteEngine On
RewriteRule ^urun/([0-9]+)$ /product.php?id=$1 [R=301,L]
Geçici yönlendirme (302 - kalıcı değil):
Redirect 302 /eski-sayfa /gecici-sayfa
2. HTTPS'e Zorlama
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
www olmayan URL'yi www'ye yönlendirmek için:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
3. WordPress Permalinks için Rewrite Kuralları
WordPress doğru çalışmak için bu kurallara ihtiyaç duyar. WordPress genellikle bunu otomatik oluşturur:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
4. IP Engelleme ve Erişim Kısıtlaması
# Belirli bir IP'yi engelle:
order allow,deny
deny from 1.2.3.4
allow from all
# Belirli bir IP'ye izin ver, diğerlerini engelle (yönetici paneli için):
order deny,allow
deny from all
allow from 85.10.20.30
# Ülkeye göre engelleme (mod_geoip gerektirir, temel yöntem):
# SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
5. GZIP Sıkıştırma
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 application/x-javascript
6. Tarayıcı Önbelleği (Browser Cache)
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "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/html "access plus 1 day"
7. Güvenlik Başlıkları
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=()"
8. Hassas Dosyalara Erişimi Engelleme
# wp-config.php'yi koru:
order allow,deny
deny from all
# .htaccess dosyasını koru:
order allow,deny
deny from all
# XML dosyalarını koru (WordPress xmlrpc.php):
order deny,allow
deny from all
Özet ve Önemli Notlar
- .htaccess değişikliklerinden önce mutlaka yedek alın
- Hatalı bir .htaccess satırı siteye erişimi tamamen engelleyebilir (500 Internal Server Error)
- Apache syntax kontrolü:
apachectl configtestveyaapache2ctl -t - Nginx kullanıyorsanız .htaccess çalışmaz; eşdeğer kuralları nginx.conf'a yazın
- Performans için mümkünse ana
httpd.conf'a taşıyın; .htaccess her istekte okunur
İlgili Makaleler
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!