Hosting & Sunucu

Her site için temel .htaccess kuralları

Pratik htaccess kurallarıyla sitenizde akıllı yönlendirmeler, Gzip sıkıştırması, tarayıcı önbelleği ve hassas dosya koruması uygulayın. Örneklerle eksiksiz rehber.

Hosting & Sunucu

Giriş: htaccess Neden Her Site Yöneticisi İçin Hayati Bir Araçtır?

.htaccess dosyası, Apache web sunucularında kullanılan, dizin düzeyinde en güçlü sunucu yönetim araçlarından biridir. Bu basit metin dosyasını kullanarak, Apache'nin ana yapılandırma dosyalarına erişmeden sunucu davranışını değiştirebilirsiniz. 301 yönlendirmelerinden dosya sıkıştırmaya, tarayıcı önbelleğinden hassas dosya korumasına kadar her şey, htaccess ile birkaç satır kodla yapılabilir. Bu makalede, her site yöneticisinin bilmesi gereken pratik ve kullanışlı kuralları inceleyeceğiz. Paylaşımlı hosting veya sanal sunucu kullanıyorsanız, muhtemelen ana web sunucunuz Apache'dir ve bu kurallar sizin için faydalı olacaktır. ServerNet de hosting hizmetlerinde Apache'yi desteklemektedir, ancak bu makalenin odak noktası sağlayıcıdan bağımsız genel tekniklerdir.

htaccess ile Akıllı Yönlendirmeler

Yönlendirmeler, htaccess'in en yaygın kullanım alanlarından biridir. İster eski bir sayfayı yenisine taşıyın, ister alan adını değiştirin, isterseniz kullanıcıları HTTP'den HTTPS'ye yönlendirin, .htaccess en iyi seçenektir.

Kalıcı 301 Yönlendirmesi

301 yönlendirmesi, arama motorlarına sayfanın kalıcı olarak taşındığını söyler. Bu, SEO sıralamasını korumak ve 404 hatasını önlemek için gereklidir. Basit bir örnek:

Redirect 301 /old-page.html https://example.com/new-page.html

Tüm bir dizini yönlendirmeniz gerekiyorsa:

RedirectMatch 301 /old-directory/(.*) https://example.com/new-directory/$1

Burada $1, orijinal URL'nin bir kısmını korur ve hedefe taşır.

HTTP'den HTTPS'ye Yönlendirme

Daha iyi güvenlik ve SEO için tüm kullanıcılar sitenin HTTPS sürümüne yönlendirilmelidir. Aşağıdaki kodu sitenizin kökündeki .htaccess dosyasına ekleyin:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Bu kod önce HTTPS'nin etkin olup olmadığını kontrol eder, ardından isteği güvenli sürüme yönlendirir.

www Alan Adını non-www'ye (veya Tersi) Yönlendirme

Alan adı bütünlüğü için sürümlerden birini seçin. www'den non-www'ye yönlendirme örneği:

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Ve tersi (non-www'den www'ye) için:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

Yaygın hata: RewriteRule kodlarının başında RewriteEngine On satırını unutmak. Bu satır olmadan hiçbir yeniden yazma kuralı çalışmaz.

Yükleme Hızını Artırmak için Gzip Sıkıştırması

HTML, CSS, JavaScript ve hatta yazı tipleri gibi dosyaları tarayıcıya göndermeden önce sıkıştırmak, aktarım boyutunu %70'e kadar azaltır. Bu, doğrudan site hızını ve kullanıcı deneyimini etkiler.

htaccess ile Gzip'i Etkinleştirme

Aşağıdaki kodu .htaccess dosyasına ekleyin:

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json application/xml
  AddOutputFilterByType DEFLATE image/svg+xml font/ttf font/otf font/woff font/woff2
</IfModule>

Bu kod, sunucuya belirtilen dosya türlerini Deflate algoritmasıyla sıkıştırmasını söyler. mod_deflate modülü genellikle Apache hostinglerde etkindir.

Sıkıştırmayı Test Etme

Sıkıştırmanın etkin olduğundan emin olmak için checkgzipcompression.com gibi çevrimiçi araçları veya terminalde curl komutunu kullanabilirsiniz:

curl -H "Accept-Encoding: gzip" -I https://example.com

Yanıtta Content-Encoding: gzip başlığını görürseniz, sıkıştırma etkindir.

Sorun giderme ipucu: Sıkıştırma çalışmıyorsa, mod_deflate modülünün sunucuda etkin olduğundan emin olun. Bazı paylaşımlı hostinglerde destek ekibinden talep etmeniz gerekebilir.

htaccess ile Tarayıcı Önbelleği

Tarayıcı önbelleği, kullanıcıların statik dosyaları (resimler, CSS, JS) yerel bellekte saklamasına olanak tanır, böylece sonraki ziyaretlerde yeniden indirilmeleri gerekmez. Bu, yükleme hızını önemli ölçüde artırır.

Cache-Control Başlıklarını Ayarlama

Aşağıdaki kodu .htaccess dosyasına ekleyin:

<IfModule mod_expires.c>
  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/javascript "access plus 1 month"
  ExpiresByType application/x-javascript "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 year"
  ExpiresByType font/ttf "access plus 1 year"
  ExpiresByType font/otf "access plus 1 year"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
</IfModule>

Bu ayarlar tarayıcıya resimleri bir yıl, CSS ve JS dosyalarını ise bir ay önbellekte tutmasını söyler. Sayıları ihtiyacınıza göre değiştirebilirsiniz.

Expires Yerine Cache-Control Kullanma

Daha modern yöntem Cache-Control başlığını kullanmaktır:

<IfModule mod_headers.c>
  <FilesMatch "\.(ico|jpg|jpeg|png|gif|webp|svg|woff|woff2|ttf|eot)$">
    Header set Cache-Control "max-age=31536000, public"
  </FilesMatch>
  <FilesMatch "\.(css|js)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
</IfModule>

Burada max-age saniye cinsindendir: 31536000 saniye bir yıla, 2592000 saniye ise bir aya eşittir.

Yaygın hata: Sık sık değişen dosyalar (ana CSS dosyaları gibi) için çok uzun önbellek süresi ayarlamak. CSS dosyasını değiştirirseniz ve kullanıcının eski önbelleği varsa, site bozuk görünebilir. Çözüm: Dosya adlarında sürümleme kullanmak (örneğin style.v2.css) veya dinamik dosyalar için daha kısa süreler ayarlamak.

htaccess ile Hassas Dosyaları Koruma

WordPress'te wp-config.php, Laravel'de .env veya veritabanı yapılandırma dosyaları gibi önemli dosyalar doğrudan tarayıcıda görüntülenmemelidir. htaccess bunun için basit araçlar sağlar.

Belirli Dosyalara Erişimi Engelleme

Hassas dosyalara erişimi engellemek için aşağıdaki kodu kullanın:

<FilesMatch "\.(env|config|sql|log|bak|old|inc)$">
  Order allow,deny
  Deny from all
</FilesMatch>

Bu kod, belirtilen uzantılara sahip dosyalara tüm kullanıcıların erişimini engeller. Daha fazla uzantı ekleyebilirsiniz.

Hassas Dizinleri Koruma

/includes veya /uploads gibi doğrudan listelenmemesi gereken dizinler için:

Options -Indexes

Bu basit satır, dizin dosya listesinin görüntülenmesini engeller. Kullanıcı, dizin indeks dosyası olmayan bir dizine erişmeye çalışırsa, dosya listesi yerine 403 Forbidden hatası alır.

Belirli IP'leri Engelleme

Belirli bir IP'nin erişimini engellemek istiyorsanız:

Order Allow,Deny
Allow from all
Deny from 192.168.1.100
Deny from 10.0.0.0/8

Burada 192.168.1.100 belirli bir IP, 10.0.0.0/8 ise bir IP aralığıdır.

Parola ile Koruma (Temel Kimlik Doğrulama)

Belirli bir dizini parola ile korumak için:

  1. Genel dizinin dışında bir .htpasswd dosyası oluşturun (örneğin /home/user/.htpasswd).
  2. htpasswd komutuyla kullanıcı adı ve parola ekleyin: htpasswd -c /home/user/.htpasswd admin
  3. İlgili dizinin .htaccess dosyasına aşağıdaki kodu ekleyin:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/user/.htpasswd
Require valid-user

Bu yöntem, yönetim bölümleri veya site hazırlık (staging) alanları için çok kullanışlıdır.

Önemli güvenlik notu: .htpasswd dosyasını asla genel bir dizine (örneğin public_html) koymayın. Aksi takdirde, kullanıcılar yolu tahmin ederek parola dosyasını indirebilir.

Gelişmiş Ayarlar: Sıcak Bağlantıyı ve Zararlı Botları Engelleme

Sıcak bağlantı (Hotlinking), diğer sitelerin izinsiz olarak resimlerinizi kullanması ve bant genişliğinizi tüketmesidir. htaccess ile bunu engelleyebilirsiniz.

Resim Sıcak Bağlantısını Önleme

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?example\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]

Bu kodda example.com değerini kendi alan adınızla değiştirin. Bu kural, diğer alan adlarından resimlerinize bağlantı veren tarayıcılara 403 Forbidden hatası döndürür.

Kötü Amaçlı Botları Engelleme

Bazı botlar (scraper'lar gibi) sunucu kaynaklarını tüketir. Bunları User-Agent ile engelleyebilirsiniz:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (ahrefsbot|mj12bot|semrushbot) [NC]
RewriteRule .* - [F,L]

Bu kod Ahrefs, Majestic ve Semrush botlarını engeller. Listeyi diğer bot adlarıyla genişletebilirsiniz.

Sonuç

.htaccess dosyası, birkaç satır kodla sitenizin performansını, güvenliğini ve hızını iyileştirebilen güçlü ve esnek bir araçtır. Akıllı yönlendirmelerden sıkıştırma ve tarayıcı önbelleğine kadar tüm bu ayarlar, ana site kodlarında değişiklik yapmadan gerçekleştirilebilir. Değişiklik yapmadan önce her zaman orijinal .htaccess dosyasının bir yedeğini almayı unutmayın. Paylaşımlı hosting kullanıyorsanız ve 500 Internal Server Error hatasıyla karşılaşırsanız, dosyayı FTP ile geri yüklemeniz yeterlidir. Bu makaledeki örnekleri uygulayarak ve pratik yaparak, sunucunuz üzerinde daha fazla kontrol sahibi olabilir ve kullanıcılarınız için daha iyi bir deneyim sunabilirsiniz.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

İletişim
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın