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 dosyası çalışmıyorsa ilk kontrol edilmesi gereken konu dosyanın doğru dizinde bulunması ve Apache yapılandırmasında .htaccess kullanımına izin verilmesidir. AllowOverride None ile AllowOverrideList None birlikteyse dosya tamamen yok sayılır; belirli yönergelere verilen liste izni bu durumu değiştirebilir. Dosya okunuyor ancak kural hata veriyorsa bu kez sözdizimi, gerekli modül veya ilgili yönerge için verilen izin kontrol edilmelidir.

Önce dosyanın gerçekten doğru yerde olduğunu kontrol edin​


Varsayılan dosya adı .htaccess şeklindedir; yönetici AccessFileName ile bunu değiştirebilir. Varsayılan ad kullanılıyorsa başında nokta bulunmalı ve ek uzantı olmamalıdır. Örneğin dosya adı .htaccess.txt olmamalıdır. Dosya, kuralın uygulanacağı web kök dizinine yerleştirilmelidir. example.com için bu dizin genellikle alan adının DocumentRoot klasörüdür; ancak kesin konum hosting panelindeki alan adı veya sanal host ayarından kontrol edilmelidir.

Alt klasörde bulunan bir .htaccess yalnızca bulunduğu klasörü ve alt klasörlerini etkiler. Ana dizindeki başka bir .htaccess dosyası da kuralların uygulanma sırasını ve sonucunu etkileyebilir.

Dosyanın okunup okunmadığını güvenli şekilde test edin​


Yetkili sunucu yöneticisi, Apache ana yapılandırmasında gerçek belge kökünü kapsayan Directory bölümünü kontrol etmelidir. Aşağıdaki yol örnektir; bu blok .htaccess içine yazılmaz:

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

Yalnızca yeniden yönlendirme ve mod_rewrite kuralları kullanılıyorsa FileInfo yeterli olabilir. Options veya kimlik doğrulama yönergeleri kullanılıyorsa ilgili AllowOverride sınıfı ayrıca gerekebilir. Daha geniş izin vermek mümkün olsa da gereksiz yere AllowOverride All kullanmak yerine ihtiyaç duyulan sınıfı seçmek daha kontrollüdür.

Ana yapılandırma değişikliğinden sonra doğru Apache örneğinin yapılandırmasını test edip başarıdan sonra yeniden yükleyin. Bu test, istek anında okunan tüm .htaccess dosyalarını doğrulamaz. Ana yapılandırmaya erişiminiz yoksa hosting firmasından ilgili alan adı için .htaccess ve gerekli override sınıflarının etkinleştirilmesini istemelisiniz.

En küçük çalışan RewriteRule örneği​


Aşağıdaki kurgusal yolu, mevcut kuralları koruduğunuz bir test ortamında ilgili .htaccess içinde deneyin. Hedef yeni-sayfa.php dosyası aynı dizinde gerçekten mevcut ve PHP çalışır olmalıdır. RewriteRule satırında kök dizin .htaccess bağlamı kullanıldığı için desenin başında / bulunmaz:

Kod:
RewriteEngine On
RewriteRule ^eski-sayfa$ yeni-sayfa.php [END]

Tarayıcıda example.com/eski-sayfa adresini açtığınızda sunucu aynı alan adı içinde yeni-sayfa.php dosyasını çalıştırmalıdır. 404 alırsanız hedef dosyanın gerçekten aynı dizinde olup olmadığını ve kuralın yanlış .htaccess dosyasına yazılmadığını kontrol edin. Kural hiç etkili değilse mod_rewrite izinlerini ve AllowOverride FileInfo ayarını kontrol edin.

Belirtiye göre doğru teşhis​

BelirtiMuhtemel nedenSonraki kontrol
Hiçbir kural etkili değilOverride izinlerinin kapalı olması veya yanlış dizinDocumentRoot ve Directory ayarını kontrol edin
HTTP 500 oluşuyorSözdizimi veya izin verilen yönerge sorunuApache error log dosyasını inceleyin
Rewrite çalışıyor ama adres değişmiyorİç yönlendirme kullanılıyorHarici yönlendirme için geçici olarak [R=302] kullanın
Kural yanlış dosyaya gidiyor.htaccess bağlamında yol hatasıBaştaki / işaretini ve hedef yolu düzeltin
HTTP 500 hatasında doğrudan tüm kuralları silmek yerine error log içindeki .htaccess satırını okuyun. not allowed here ifadesi ilgili yönergeye izin verilmediğini, bad flag delimiters veya benzeri bir ifade ise kural sözdiziminin hatalı olduğunu gösterir. Değişiklik sırasında kalıcı 301 yönlendirmesi yerine 302 kullanmak, kalıcı yönlendirmeden kaynaklanabilecek uzun süreli yanlış önbellek etkisini azaltır. 302 de uygun başlıklarla önbelleklenebileceği için taze istek ve yanıt başlıklarıyla kontrol edin.

Rewrite kurallarında döngü oluşması da 500 hatasına neden olabilir. Kuralın hedefi tekrar aynı desene uyuyorsa hedefi dışlayan koşul ekleyin. [L] yalnız mevcut turu bitirir; sonraki dizin içi işleme turunda yeniden giriş olabilir. Apache 2.4’te [END] aynı istek için sonraki dizin içi rewrite işlemlerini de durdurur, ancak yanlış hedef tasarımını kendiliğinden düzeltmez. Apache error log ve gerekiyorsa geçici rewrite izleme günlükleri, hangi desenin eşleştiğini ve hangi hedefin üretildiğini gösterir. Ayrıntılı izlemeyi teşhis bitince kapatın.

Sık sorulan sorular​


.htaccess değişikliğinde Apache yeniden başlatılmalı mı?​


Genellikle hayır; etkin .htaccess istek sırasında okunur. Ancak buna izin veren ana Apache yapılandırması değiştirildiyse sözdizimi testi ve uygun yeniden yükleme gerekir.

Hosting panelinde AllowOverride ayarını değiştiremiyorsam ne yapmalıyım?​


Bu ayar genellikle yalnızca sunucu yöneticisi tarafından değiştirilebilir. Hosting desteğinden ilgili alan adının DocumentRoot dizininde .htaccess kullanımının ve kullandığınız yönerge sınıfının etkinleştirilmesini isteyin.

Apache yerine Nginx kullanıyorsam .htaccess neden çalışmaz?​


.htaccess, Apache’nin per-directory yapılandırma mekanizmasıdır. Arka planda Apache bulunmadan istekleri yalnız Nginx işliyorsa aynı kurallar Nginx sunucu yapılandırmasındaki karşılıklarıyla yazılmalıdır.

Nginx önde ters proxy, Apache arkada uygulama sunucusu olarak çalışıyorsa Apache’ye ulaşan isteklerde Apache kuralları yine uygulanabilir. Kullanılan sunucu zincirini hosting sağlayıcısından doğrulayın.
 

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.