.htaccess Dosyasının İşlevi ve Kullanım Ortamları
.htaccess
dosyası, Apache web sunucusunda belirli dizinler için yapılandırma ayarlarını değiştirmek amacıyla kullanılır. Web yöneticilerine sunucu ayarlarını değiştirmeden esnek ve hızlı bir yapılandırma imkanı tanır. Genellikle URL yeniden yazma, erişim kontrolü ve yetkilendirme, özel hata sayfaları oluşturma, dosya ve dizin indeksi ayarları, güvenlik ve performans iyileştirmeleri gibi amaçlarla kullanılır. Doğru ve güvenli bir şekilde kullanıldığında, web sitesinin performansı ve güvenliği açısından büyük avantaj sağlar.
Kullanım Alanları
.htaccess
dosyası ile yapılabilecek işlemler oldukça geniş bir yelpazeye yayılmaktadır. .htaccess
dosyası ile gerçekleştirilebilecek başlıca işlemler:
1. URL Yeniden Yazma ve Yönlendirme
- URL yeniden yazma (mod_rewrite): Dinamik URL'leri kullanıcı dostu hale getirme.
- 301 Yönlendirmeleri: Kalıcı olarak bir URL'yi başka bir URL'ye yönlendirme.
- 302 Yönlendirmeleri: Geçici olarak bir URL'yi başka bir URL'ye yönlendirme.
- Köprü Sayfası Yönlendirmesi: Trafiği belirli bir sayfaya yönlendirme.
2. Erişim Kontrolü ve Yetkilendirme
- Şifre koruması (Basic Authentication): Belirli dizinleri kullanıcı adı ve şifre ile koruma.
- IP tabanlı erişim kontrolü: Belirli IP adreslerine veya IP aralıklarına erişim izni verme veya engelleme.
- Dosya ve dizin erişim kısıtlamaları: Belirli dosya türlerine veya dizinlere erişimi kısıtlama.
3. Özel Hata Sayfaları
- Özel hata sayfaları: 404 (Bulunamadı), 403 (Yasak), 500 (Sunucu Hatası) gibi hata kodları için özel sayfalar oluşturma.
4. Dosya ve Dizin İndeksi Ayarları
- Dizin listelemeyi kapatma: Belirli dizinlerde dosya ve dizin listesinin görüntülenmesini engelleme.
- Özel dizin listeleme: Dizin listeleri için özel şablonlar kullanma.
5. MIME Türleri Ayarları
- MIME türleri belirleme: Belirli dosya uzantıları için MIME türlerini tanımlama veya değiştirme.
6. Güvenlik İyileştirmeleri
- Hotlink koruması: Başka sitelerin, sitenizdeki görselleri ve diğer dosyaları doğrudan kullanmasını engelleme.
- Dosya türü erişim kontrolü: Belirli dosya türlerine erişimi sınırlama.
- HTTP başlıkları ekleme: Güvenlik ve performans için özel HTTP başlıkları ekleme (örneğin, HSTS, Content Security Policy).
7. Performans İyileştirmeleri
- Gzip sıkıştırma: HTML, CSS, JavaScript dosyalarını sıkıştırarak sayfa yükleme sürelerini azaltma.
- Önbellekleme ayarları: Tarayıcı önbellekleme sürelerini ayarlayarak performansı artırma.
8. Dil ve Karakter Seti Ayarları
- Varsayılan dil ayarı: Belirli dizinler için varsayılan dili ayarlama.
- Karakter seti belirleme: Belirli dosyalar için karakter seti tanımlama.
9. Özel Yönlendirmeler
- Mobil cihaz yönlendirmesi: Mobil cihazlardan gelen trafiği mobil sürüme yönlendirme.
- Dil bazlı yönlendirme: Kullanıcının tarayıcı diline göre farklı sayfalara yönlendirme.
10. CORS Yapılandırması
CORS (Cross-Origin Resource Sharing), web sitelerinin farklı kökenlerden gelen kaynaklara erişimini kontrol etmek için kullanılır. .htaccess
dosyası ile CORS yapılandırması yapmak, belirli kaynakların hangi kökenlerden erişilebileceğini belirlemeyi sağlar.
11. Diğer Ayarlar
- SSI (Server Side Includes): Sunucu tarafı dahil etmeler için ayar yapma.
- CGI ve Perl ayarları: CGI ve Perl betikleri için özel ayarlar yapma.
- Belirli modüllerin etkinleştirilmesi veya devre dışı bırakılması: Apache modüllerinin etkinleştirilmesi veya devre dışı bırakılması.
Bu işlemler, .htaccess
dosyasının web yöneticilerine sağladığı esneklik ve güç hakkında bir fikir vermektedir. Her bir ayarın doğru ve güvenli bir şekilde uygulanması, web sitesinin performansı ve güvenliği açısından büyük önem taşır.
Örnek Kullanım Senaryoları
1. URL Yeniden Yazma
Kullanıcı dostu URL'ler oluşturmak için mod_rewrite modülü kullanılır:
RewriteEngine On
RewriteRule ^page/([0-9]+)$ page.php?id=$1 [L]
Bu örnekte, example.com/page/1
adresi example.com/page.php?id=1
olarak yeniden yazılır.
301 Yönlendirmeleri:
Redirect 301 /oldpage.html http://www.example.com/newpage.html
Bu kural, oldpage.html
dosyasını kalıcı olarak newpage.html
dosyasına yönlendirir.
302 Yönlendirmeleri:
Redirect 302 /temporarypage.html http://www.example.com/newpage.html
Bu kural, temporarypage.html
dosyasını geçici olarak newpage.html
dosyasına yönlendirir.
2. Erişim Kontrolü ve Yetkilendirme
Belirli bir dizine şifre koruması (Basic Authentication) eklemek:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
Bu ayar, belirli bir dizini kullanıcı adı ve şifre ile korur. Bu ayarın çalışması için .htpasswd
dosyasının oluşturulması ve kullanıcı adı ile şifre bilgilerinin bu dosyada bulunması gerekir.
.htpasswd Dosyası Nasıl Kullanılır?
IP tabanlı erişim kontrolü:
Order Deny,Allow
Deny from all
Allow from 123.456.789.000
Bu kural, sadece belirli bir IP adresinden erişime izin verir.
3. Özel Hata Sayfaları
Özel bir 404 hata sayfası ayarlamak:
ErrorDocument 404 /custom_404.html
Bu ayar, 404 hatası alındığında kullanıcıyı custom_404.html
sayfasına yönlendirir.
4. Dosya ve Dizin İndeksi Ayarları
Dizin listelemeyi kapatma:
Options -Indexes
Bu kural, dizin içeriğinin listelenmesini engeller.
Özel dizin listeleme:
Options +Indexes
IndexOptions FancyIndexing
Bu ayar, dizin listelemeyi açar ve listelemeyi daha şık hale getirir.
5. MIME Türleri Ayarları
MIME türleri belirleme:
AddType application/pdf .pdf
AddType application/x-shockwave-flash .swf
Bu kurallar, .pdf
dosyalarını application/pdf
ve .swf
dosyalarını application/x-shockwave-flash
olarak tanımlar.
6. Güvenlik İyileştirmeleri
Hotlink Koruması:
Başka sitelerin, sitenizdeki görselleri kullanmasını engellemek:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Bu kural, başka sitelerden gelen isteklerin resim dosyalarınıza erişimini engeller.
Dosya türü erişim kontrolü:
Order Allow,Deny
Deny from all
Bu kural, belirli dosya türlerine erişimi kısıtlar.
7. Performans İyileştirmeleri
Gzip Sıkıştırma :
Web sitesi hızını artırmak için gzip sıkıştırması etkinleştirmek:
< IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
< /IfModule>
Bu ayar, belirli dosya türleri için gzip sıkıştırmasını etkinleştirir, bu da sayfa yükleme sürelerini iyileştirir.
Önbellekleme ayarları:
ExpiresActive On ExpiresByType image/jpg "access plus 1 month" ExpiresByType text/css "access plus 1 week" ExpiresByType application/pdf "access plus 1 month"
Bu kurallar, belirli dosya türleri için tarayıcı önbellekleme sürelerini ayarlar.
8. Dil ve Karakter Seti Ayarları
Varsayılan dil ayarı:
AddDefaultCharset UTF-8
Bu ayar, varsayılan karakter setini UTF-8 olarak belirler.
9. Özel Yönlendirmeler
Mobil cihaz yönlendirmesi:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini" [NC]
RewriteRule ^$ http://m.example.com/ [L,R=302]
Bu kural, mobil cihazlardan gelen trafiği mobil sürüme yönlendirir.
Dil bazlı yönlendirme:
RewriteEngine On RewriteCond %{HTTP:Accept-Language} ^en [NC] RewriteRule ^$ /en/ [L,R=302] RewriteCond %{HTTP:Accept-Language} ^fr [NC] RewriteRule ^$ /fr/ [L,R=302]
Bu kurallar, tarayıcı diline göre farklı sayfalara yönlendirir.
10. CORS Yapılandırması
Tüm Kökenlerden Gelen İsteklere İzin Verme
Header set Access-Control-Allow-Origin "*"
Bu ayar, tüm kökenlerden gelen isteklere izin verir. Ancak bu, güvenlik açısından önerilmez, çünkü herhangi bir site sizin kaynaklarınıza erişebilir.
Belirli Bir Köken İçin CORS İzni Verme
Header set Access-Control-Allow-Origin "http://example.com"
Bu ayar, sadece http://example.com
kökeninden gelen isteklere izin verir.
Birden Fazla Köken İçin CORS İzni Verme
Ne yazık ki, Access-Control-Allow-Origin
başlığı birden fazla kökeni doğrudan desteklemez. Ancak, dinamik olarak bu başlığı ayarlamak için bir çözüm kullanılabilir.
RewriteEngine On RewriteCond %{HTTP:Origin} ^(http://example.com|http://another-example.com)$ [NC] RewriteRule .* - [E=ORIGIN:%{HTTP:Origin}] Header set Access-Control-Allow-Origin "%{ORIGIN}e" env=ORIGIN
Bu ayar, http://example.com
ve http://another-example.com
kökenlerinden gelen isteklere izin verir.
Preflight İsteklerine İzin Verme
Preflight istekleri (OPTIONS istekleri), tarayıcıların CORS isteklerini kontrol etmek için gönderdiği isteklere verilen yanıtlardır. Bunları .htaccess
ile yapılandırmak için aşağıdaki ayarları kullanabilirsiniz.
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, DELETE, PUT"
Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
Bu ayar, tüm kökenlerden gelen isteklere izin verir ve belirli HTTP metodlarına (GET, POST, OPTIONS, DELETE, PUT) izin verir. Ayrıca, belirli başlıkların (X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding) kullanımına izin verir.
Bu ayarlar, .htaccess
dosyasının nasıl kullanıldığını ve CORS yapılandırmasını nasıl yönettiğini göstermektedir. CORS yapılandırması yaparken, güvenlik ve işlevsellik arasında denge kurmak önemlidir. Belirli kökenlere izin vermek, genel izin vermekten daha güvenli bir yaklaşımdır.
11. Diğer Ayarlar
SSI (Server Side Includes) etkinleştirme:
Options +Includes
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Bu ayar, sunucu tarafı dahil etmeleri etkinleştirir.
CGI ve Perl betikleri için ayarlar:
AddHandler cgi-script .cgi .pl Options +ExecCGI
Bu kurallar, CGI ve Perl betikleri için özel ayarlar yapar.
.htaccess
dosyası, web yöneticilerine sunucu yapılandırmalarını kolay ve hızlı bir şekilde yönetme olanağı tanır. Yukarıda verilen örnekler, .htaccess dosyasının ne kadar güçlü ve esnek bir araç olduğunu göstermektedir. Apache sunucusunda çalışan web siteleri için .htaccess dosyasının doğru ve güvenli bir şekilde kullanılması, sitenin performansı ve güvenliği açısından büyük önem taşır.
.htaccess Dosyasını Kullanarak HTTP istekleri HTTPS ye Nasıl Yönlendirilir?
- Web Yazılım
- Linux
- Apache
Tepkini Göster
- 4
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
Yorumlar
Sende Yorumunu Ekle