Birçok poster, .htaccess
dosyalarındaki RewriteRule ve RewriteCond ifadelerinde hata ayıklamada sorun yaşar . Bunların çoğu paylaşılan bir barındırma hizmeti kullanıyor ve bu nedenle kök sunucu yapılandırmasına erişimi yok. Onlar ortadan kaldıramıyorsanız .htaccess
yeniden yazma için dosyaları ve olamaz birçok katılımcı önerdiği gibi bir RewriteLogLevel" etkinleştirin. Ayrıca çok var .htaccess
ya spesifik tuzaklar ve kısıtlamaları iyi kapsamında değildir edilmektedir. Ayarlama yerel testi LAMBA yığın çoğu için çok fazla bir öğrenme eğrisi gerektirir .
Buradaki Q'm , kurallarının kendilerinde hata ayıklamalarını nasıl önerebiliriz . Aşağıda birkaç öneri sunuyorum. Diğer öneriler takdir edilecektir.
Mod_rewrite motorunun
.htaccess
dosyalar arasında dolaştığını anlayın . Motor şu döngüyü çalıştırır:do execute server and vhost rewrites (in the Apache Virtual Host Config) find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled if found(.htaccess) execute .htaccess rewrites (in the user's directory) while rewrite occurred
Böylece kurallarınız tekrar tekrar yürütülür ve URI yolunu değiştirirseniz,
.htaccess
varsa diğer dosyaları da yürütür. Bu nedenle, gerektiğindeRewriteCond
kuralların tetiklenmesini durdurmak için fazladan ekleyerek bu döngüyü sonlandırdığınızdan emin olun . Ayrıca.htaccess
, açıkça çok düzeyli kural kümelerini kullanmak istemedikçe, daha düşük düzeyli yeniden yazma kural kümelerini de silin .Geçerli bir sözdizimi olduğundan ve tam olarak bir dizi test URI'si ile ne yapmak istediğinizi yaptığından emin olmak için bir dizi test deseni ile test yaparak her Regexp'nin sözdiziminin doğru olduğundan emin olun. Daha fazla ayrıntı için aşağıdaki cevaba bakınız .
Kurallarınızı adım adım bir test dizininde oluşturun.
.htaccess
Ana kurallarınızı bozmadan ve sitenizin çalışmasını durdurmadan ayrı bir test dizini (ağaç) oluşturmak ve kural ayıklama kurallarını ayarlamak için "yoldaki en derin dosyayı yürüt" özelliğini kullanabilirsiniz. Bunları tek tek eklemeniz gerekir, çünkü hataları tek tek kurallara göre yerelleştirmenin tek yolu budur.Sunucu ve ortam değişkenlerini boşaltmak için sahte bir komut dosyası kullanın . (Bkz. Liste 2 ) Uygulamanız varsa diyelim,
blog/index.php
bunu kopyalayabilirtest/blog/index.php
vetest
alt dizindeki blog kurallarınızı test etmek için kullanabilirsiniz . Yeniden yazma motorunun, ikame dizelerini doğru şekilde yorumlarken ortam değişkenlerini de kullanabilirsiniz;RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
ve phpinfo dökümünde bu REDIRECT_ * değişkenlerini arayın . BTW, bunu kullandım ve sitemde kullanmam gerektiğini keşfettim
%{ENV:DOCUMENT_ROOT_REAL}
. Yeniden yönlendirici döngüsünde REDIRECT_REDIRECT_ * değişkenleri önceki geçişi listeler. Vb..Yanlış 301 yönlendirmelerini önbelleğe alarak tarayıcınız tarafından ısırılmadığınızdan emin olun . Aşağıdaki cevaba bakınız . Bunun için Ulrich Palha'ya teşekkür ederim .
Yeniden yazma motoru
.htaccess
, bir bağlam içindeki basamaklı kurallara karşı hassas görünüyor (bu,RewriteRule
bir ikame ile sonuçlanır ve bu da başka kurallara düşüyor), çünkü dahili alt istekleri olan hatalar bulduğumdan (1) ve sıklıkla ortaya çıkabilecek yanlış PATH_INFO işleme [NS], [L] ve [PT] bayraklarının kullanılmasını önler.
Başka yorum veya öneriniz var mı?
Liste 1 - phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);