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

Apache AllowOverride ile .htaccess ilişkisi​


Apache’de AllowOverride, bir dizin için .htaccess dosyasında hangi yapılandırma direktiflerinin kullanılabileceğini belirler. AllowOverride None ve AllowOverrideList None birlikteyse .htaccess okunmaz; AllowOverride All ise izin verilen tüm override grupları açılır. Bu nedenle .htaccess içindeki bir kural çalışmıyorsa ilk kontrol edilmesi gereken yer, ilgili dizinin Apache yapılandırmasındaki AllowOverride ayarıdır.

Nasıl çalışır?​


Apache, eşlenen dosya yolunun üst dizinlerindeki geçerli dağıtık yapılandırmaları değerlendirebilir; kapsamı yalnız belge kökünden başlıyor sanmayın. Dosyanın bulunduğu dizin için .htaccess kullanımına izin verilmişse içindeki direktifleri okur. Ancak her direktif otomatik olarak geçerli değildir; direktifin bağlı olduğu override sınıfı açık olmalıdır.

Örneğin URL yeniden yazma kuralları genellikle FileInfo sınıfına, kimlik doğrulama direktifleri ise AuthConfig sınıfına bağlıdır. AllowOverride All sorunu hızlıca gizleyebilir; fakat hangi özelliğin gerektiğini belirleyip yalnızca ilgili sınıfı açmak daha kontrollü bir yaklaşımdır.

Somut örnek: URL yeniden yazmayı etkinleştirme​


Varsayalım ki site dosyaları /var/www/example altında ve bu dizinde aşağıdaki .htaccess dosyası bulunuyor:

Kod:
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^eski$ /yeni [R=302,L]
</IfModule>

Bu kuralın çalışabilmesi için ilgili Apache yapılandırmasında örneğin şu bölüm bulunmalıdır:

Kod:
<Directory "/var/www/example">
    AllowOverride FileInfo
</Directory>

Bu parça, mevcut doğru dizin bölümündeki override ayarını gösterir; erişim denetimi kurallarınızı değiştirmez. FileInfo rewrite direktiflerine izin verir. Ayrıca mod_rewrite yüklü olmalı ve dizin kapsamında FollowSymLinks veya SymLinksIfOwnerMatch uygun biçimde etkin olmalıdır. Sunucu yapılandırmasına yönetici erişimi gerekir. Yapılandırmayı değiştirdikten sonra Apache yapılandırmasını doğrulayın ve başarılıysa yeniden yükleyin:

Kod:
apachectl configtest
apachectl graceful

Başarılı doğrulamada beklenen temel çıktı Syntax OK ifadesidir. Doğrulama hata verirse Apache yeni yapılandırmayı yüklememiş olabilir; hata mesajındaki dosya ve satırı düzeltmeden yeniden yükleme yapmayın. Ana yapılandırma testi, her istekte okunacak .htaccess içeriğini bütün durumlarıyla sınamaz. Örnek kök dizinde /eski isteği için 302 ve /yeni konumunu bekleyin; ilgisiz bir yolun yönlenmediğini de kontrol edin. Yapılandırma doğru olduğu hâlde kural çalışmıyorsa mod_rewrite modülünün yüklü olup olmadığını, .htaccess dosyasının doğru dizinde bulunduğunu ve dosya adının tam olarak .htaccess olduğunu kontrol edin.

Aşağıdaki tablo, yaygın ihtiyaç ile ilgili ayar arasındaki kararı özetler:

İhtiyaçGerekli sınıfKontrol edilecek nokta
URL yeniden yazmaFileInfoRewriteEngine ve RewriteRule
Parola doğrulamaAuthConfigKimlik doğrulama modülleri ve kullanıcı dosyası
Dizin listelemeyi Options ile açıp kapatmaOptionsOptions -Indexes için verilen sınıfı kontrol edin
Hiçbir .htaccess kuralına izin vermemeAllowOverride None + AllowOverrideList NoneKuralların ana Apache yapılandırmasına taşınması

Uygulanabilir karar ve sık hatalar​


  1. Önce .htaccess içinde kullanılan direktifleri belirleyin. Örneğin yalnızca RewriteRule kullanılıyorsa gereksiz yere All açmayın.
  2. Direktiflerin geçerli olduğu dizini kapsayan <Directory> bölümünü bulun. AllowOverride başka bir dizin için değiştirilmişse doğru dosya yolunu kapsamayabilir.
  3. İhtiyaca uygun sınıfı, örneğin AllowOverride FileInfo veya AllowOverride AuthConfig olarak ayarlayın. Birden fazla sınıf gerekiyorsa aralarında boşluk kullanın.
  4. Apache yapılandırmasını apachectl configtest ile doğrulayın; hata varsa önce bunu düzeltin.
  5. Apache’yi yeniden yükleyip isteği tekrar deneyin. 500 Internal Server Error alırsanız hata günlüğünü inceleyin; çoğunlukla izin verilmeyen veya yazımı hatalı bir direktif bulunur.

Indexes sınıfı DirectoryIndex ve IndexOptions gibi direktifleri kapsar; Options -Indexes için gereken sınıf Options’tır. AllowOverrideList ile tek tek izin verilmiş direktifler varsa None tek başına dosyayı kapatmaz. Diğer bir hata da AllowOverride All verildiğinde her direktifin çalışacağını sanmaktır; modül eksikliği, yanlış dizin kapsamı veya direktifin farklı bir override sınıfına ait olması yine sorun çıkarabilir. Sunucu yapılandırmasına erişiminiz varsa kuralları doğrudan ana Apache yapılandırmasına taşımak genellikle daha açık ve daha kolay denetlenebilir; .htaccess ise ana yapılandırmaya erişilemeyen barındırma ortamlarında pratik bir seçenektir.

Sık sorulan sorular​


AllowOverride satırı .htaccess içine yazılır mı?​


Hayır. Ana Apache yapılandırmasındaki, düzenli ifade kullanmayan <Directory> bölümünde geçerlidir. .htaccess veya Location içine eklemek doğru değildir; paylaşımlı hostingde sağlayıcının ilgili ayarı yönetmesi gerekebilir.

AllowOverride All kullanmak sorunu kesin olarak çözer mi?​


Hayır. Yanlış dizin kapsamı, eksik modül, sözdizimi hatası veya başka bir Apache kuralı sorunun devam etmesine neden olabilir. Ayrıca yalnız gereken sınıfı açmak, gereksiz direktifleri sınırlamak açısından daha uygundur.
 

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