- Konu sahibi
- #1
.htaccess, Apache HTTP Server üzerinde belirli bir klasör ve onun alt klasörleri için ek yapılandırma yapmanızı sağlayan dosyadır. Ana Apache yapılandırmasına erişiminiz yoksa yönlendirme, URL yeniden yazma, erişim kısıtlama, özel hata sayfaları ve bazı önbellek ayarlarını klasör bazında uygulayabilirsiniz.Dosya genellikle sitenin web kök dizinine, yani
public_html, htdocs veya Apache DocumentRoot klasörüne konur. Dosya adı tam olarak .htaccess olmalıdır. Başındaki nokta nedeniyle FTP istemcisinde gizli dosyaları görünür yapmanız gerekebilir..htaccess nasıl çalışır?
Dosyadaki kurallar bulunduğu klasör için geçerlidir ve alt klasörlere de uygulanır. Örneğin kök dizindeki bir dosya tüm siteyi etkileyebilir;
blog/.htaccess ise yalnızca /blog/ ve altındaki yolları etkiler.Her sunucuda tüm yönergeler serbest değildir. Apache yöneticisinin ana yapılandırmada ilgili klasör için
AllowOverride izni vermesi gerekir. AllowOverride None dosyayı yok saydırabilir; izin verilmeyen tek bir direktif ise 500 üretebilir. Rewrite için mod_rewrite ve FileInfo iznine ek olarak dizinde FollowSymLinks veya SymLinksIfOwnerMatch koşulu da sağlanmalıdır. Ana yapılandırmaya erişiminiz varsa aynı ayarları <Directory> bloğunda yapmak genellikle daha uygundur; .htaccess dosyaları istekler işlenirken tekrar okunur.Basit örnek: eski URL'yi yönlendirme
Aşağıdaki örnek, sitenin kök dizinindeki
eski.html isteğini yeni.html adresine test amacıyla geçici yönlendirir. Hedef ve zincir doğrulanınca kalıcı politika için 301 kullanılabilir.public_htmlveya sitenizin web kök dizininde yeni bir dosya oluşturun.- Dosyanın adını tam olarak
.htaccessyapın. - Aşağıdaki içeriği ekleyin:
Kod:
RedirectMatch 302 ^/eski\.html$ /yeni.html
Bu örnek mod_alias içindeki RedirectMatch direktifini kullanır; RewriteEngine gerektirmez. Tarayıcıda
http://example.com/eski.html adresini açtığınızda Apache yeni adrese yönlendirme cevabı vermelidir. yeni.html dosyası mevcutsa yeni içerik görüntülenir. Dosya yoksa yönlendirme çalışmış olsa bile ikinci adreste 404 Not Found alırsınız; bu durumda hedef dosyayı veya hedef yolu düzeltin.Yaygın URL yeniden yazma örneği
Apache 2.4 üzerinde mevcut ve çalışan bir index.php giriş dosyasına sahip uygulamanız tüm bulunamayan yolları
index.php dosyasına gönderiyorsa, kök dizindeki .htaccess için şu yapı kullanılabilir:
Kod:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [END]
Bu kural mevcut dosya ve klasörleri değiştirmez. Örneğin
/css/site.css gerçekten varsa doğrudan sunulur; fiziksel karşılığı olmayan /urun/kalem isteği index.php dosyasına aktarılır. Uygulamanızın bu isteği okuyup doğru sayfayı üretmesi gerekir; tek başına Apache kuralı ürün sayfası oluşturmaz.Kullanım amacına göre doğru yaklaşım
Aynı dosyaya rastgele kurallar eklemek yerine önce amacınızı belirleyin:
| Amaç | Kullanılabilecek yaklaşım | Dikkat edilmesi gereken |
|---|---|---|
| Eski adresi değiştirmek | Redirect veya dış yönlendirmeli RewriteRule | Hedef adresin gerçekten çalıştığını kontrol edin |
| Dinamik URL üretmek | mod_rewrite | Kök .htaccess içinde desen başına / koymayın |
| Dosya veya klasör erişimini sınırlamak | Require yönergeleri | Apache 2.4 sözdizimini kullanın; eski Order/Deny örneklerini kopyalamayın |
Hata alırsanız nasıl teşhis edilir?
- Önce yaptığınız son değişikliği geri alın ve dosyanın adını, konumunu ve yazımını kontrol edin.
- Sitede
500 Internal Server Erroroluşuyorsa Apache hata günlüğünü veya hosting kontrol panelindeki error log bölümünü inceleyin. Hatalı yönerge, eksik modül veya izin kısıtlaması en yaygın nedenlerdir. - Kural hiç çalışmıyorsa hosting sağlayıcınızdan ilgili klasör için
AllowOverride FileInfoveya ihtiyacınız olan yönerge grubunun etkin olup olmadığını sorun. - Rewrite kuralında döngü oluşuyorsa mevcut dosya ve klasörleri hariç tutan
!-fve!-dkoşullarını kullanın; kuralları tek tek test edin.
En sık yapılan hata, sunucu yapılandırması bağlamındaki örneği doğrudan
.htaccess dosyasına kopyalamaktır. Özellikle RewriteRule desenleri burada klasöre göre göreli çalışır; kök dizindeki kural ile blog/ içindeki kural aynı yazılmaz. Ayrıca yedek almadan tüm siteyi etkileyen kuralları değiştirmeyin ve başarılı bir testten sonra tarayıcı önbelleği ile kalıcı yönlendirme önbelleğini dikkate alın.Sık sorulan sorular
.htaccess değişikliğinde Apache her zaman yeniden başlatılır mı?
Normalde bu dosya istek sırasında okunduğu için değişiklik yeni isteğe yansır. Ancak modül, AllowOverride veya ana sunucu yapılandırması değişiyorsa sunucu yöneticisinin uygun doğrulama/yeniden yükleme işlemi gerekebilir. Bu iki yapılandırma düzeyini ayırın.
Nginx sunucuda .htaccess çalışır mı?
Hayır.
.htaccess Apache’ye özgü bir yapılandırma yöntemidir. Nginx kullanılıyorsa eşdeğer ayarlar sunucunun ana yapılandırma dosyalarında yapılmalıdır.Birden fazla .htaccess dosyası kullanılabilir mi?
Evet. Farklı klasörlerdeki dosyalar kendi klasörlerini ve alt klasörlerini etkiler. Ancak üst ve alt dizin kurallarının birleşmesi beklenmeyen sonuçlar doğurabileceğinden kuralları mümkün olduğunca sade tutun.