Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
.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.

  1. public_html veya sitenizin web kök dizininde yeni bir dosya oluşturun.
  2. Dosyanın adını tam olarak .htaccess yapın.
  3. 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şımDikkat edilmesi gereken
Eski adresi değiştirmekRedirect veya dış yönlendirmeli RewriteRuleHedef adresin gerçekten çalıştığını kontrol edin
Dinamik URL üretmekmod_rewriteKök .htaccess içinde desen başına / koymayın
Dosya veya klasör erişimini sınırlamakRequire yönergeleriApache 2.4 sözdizimini kullanın; eski Order/Deny örneklerini kopyalamayın

Hata alırsanız nasıl teşhis edilir?​


  1. Önce yaptığınız son değişikliği geri alın ve dosyanın adını, konumunu ve yazımını kontrol edin.
  2. Sitede 500 Internal Server Error oluş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.
  3. Kural hiç çalışmıyorsa hosting sağlayıcınızdan ilgili klasör için AllowOverride FileInfo veya ihtiyacınız olan yönerge grubunun etkin olup olmadığını sorun.
  4. Rewrite kuralında döngü oluşuyorsa mevcut dosya ve klasörleri hariç tutan !-f ve !-d koş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.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic