.Htaccess RewriteRule çalışmıyor hata ayıklama
Bir var RewriteRulebir de .htaccesshiçbir şey yapmıyor dosyası. Bunu nasıl giderebilirim?
.htaccessDosyanın Apache tarafından okunup ona itaat edildiğini nasıl doğrulayabilirim ? Bir yankı "çalışıyor" mesajı yazabilir miyim, yazarsam bu satır nerede yankılanır?- Eğer
.htaccessdosya kullanılmayan, nasıl Apache kullanmak yapabilir? - Eğer
.htaccesskullanılıyorsa ancak benimRewriteRulehala bir etkisi yoksa, hata ayıklamak için daha ne yapabilirim?
Yanıtlar
.htaccessÖrneğin foo bar, sakjnaskljdnashtaccess tarafından tanınmayan herhangi bir anahtar kelimenize bir miktar önemsiz değer girin ve URL'nizi ziyaret edin. Çalışıyorsa, bir almalısınız
500 Dahili Sunucu Hatası
İç Sunucu Hatası
Sunucu, dahili bir hata veya yanlış yapılandırma ile karşılaştı ve isteğinizi tamamlayamadı ...
Hemen sonra koymanızı öneririm RewriteEngine on.
Makinenizde olduğunuz için. Apache .confdosyasına erişiminiz olduğunu varsayıyorum .
.confdosyayı açın ve şuna benzer bir satır arayın:
LoadModule rewrite_module modules/mod_rewrite.so
Yorumlanmışsa (#), açıklamayı kaldırın ve apache'yi yeniden başlatın.
Yeniden yazmayı kaydetmek için
RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9
Yukarıdaki 3 satırı virtualhost. httpd'yi yeniden başlatın.
RewriteLogLevel 9Seviye için yüksek bir değer kullanmak Apache sunucunuzu önemli ölçüde yavaşlatacaktır! Yeniden yazma günlük dosyasını 2'den büyük bir Düzeyde yalnızca hata ayıklama için kullanın! Seviye 9, hemen hemen her yeniden yazma günlüğü ayrıntısını kaydeder.
GÜNCELLEME
Apache 2.4'te işler değişti:
FROM 2.2'den 2.4'e yükseltme
RewriteLog ve RewriteLogLevel direktifleri kaldırıldı. Bu işlevsellik artık LogLevel yönergesi kullanılarak mod_rewrite modülü için uygun günlük kaydı seviyesinin yapılandırılmasıyla sağlanmaktadır . Mod_rewrite günlük kaydı bölümüne de bakın.
LogLevel hakkında daha fazla bilgi için LogLevel Direktifine bakın
başarabilirsin
RewriteLog "/path/to/rewrite.log"
şimdi bu şekilde
LogLevel debug rewrite_module:debug
'Bir miktar önemsiz değer girin' yanıtı benim için hile yapmadı, sitem girilen önemsizlere rağmen yüklenmeye devam ediyordu.
Bunun yerine .htaccess dosyasının üstüne aşağıdaki satırı ekledim:
deny from all
Bu, .htaccess'in alınıp alınmadığını hızlı bir şekilde size bildirecektir. .Htaccess kullanılıyorsa, bu klasördeki dosyalar hiç yüklenmez.
Genellikle .htaccess'teki herhangi bir değişikliğin görünür etkileri olmalıdır. Etki yoksa, yapılandırma apache dosyalarınızı kontrol edin, örneğin:
<Directory ..>
...
AllowOverride None
...
</Directory>
Olarak değiştirilmelidir
AllowOverride All
Ve .htaccess dosyalarındaki yönergeleri değiştirebileceksiniz.
Belki daha mantıklı bir yöntem, bir dosya oluşturmak (örn. Test.html), biraz içerik eklemek ve ardından bunu dizin sayfası olarak ayarlamaya çalışmak olabilir:
DirectoryIndex test.html
Çoğunlukla, .htaccess kuralı, dizin / dosya düzeyinde çalışırken Apache yapılandırmasını geçersiz kılacaktır.
Üç sorudan ilk soruyu cevaplamak için, .htaccess dosyasının çalışıp çalışmadığını görmenin basit bir yolu .htaccess dosyasının en üstünde özel bir hatayı tetiklemektir:
ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]
İkinci sorunuza gelince, .htaccess dosyası okunmuyorsa, sunucunun ana Apache yapılandırmasının olarak AllowOverrideayarlanmış olması mümkündür None. Apache'nin belgelerinde bu ve .htaccess'in etkili olmasını engelleyebilecek diğer durumlar için sorun giderme ipuçları vardır .
Son olarak, üçüncü sorunuza cevap vermek için , yeniden yazma kuralınızda referans verdiğiniz belirli değişkenlerde hata ayıklamanız gerekiyorsa veya kuraldan bağımsız olarak değerlendirmek istediğiniz bir ifade kullanıyorsanız , aşağıdakileri yapabilirsiniz:
Beklediğiniz değere sahip olduğundan emin olmak için başvurduğunuz değişkenin çıktısını alın:
ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=200]
İfadeyi bir <If>Direktife koyarak bağımsız olarak test edin . Bu, ifadenizin doğru yazıldığından veya beklediğinizde eşleştiğinden emin olmanızı sağlar:
<If "%{REQUEST_URI} =~ /word$/">
ErrorDocument 200 "Your expression is priceless!"
RewriteRule ^ - [L,R=200]
</If>
Mutlu .htaccess hata ayıklamaları!
Apache bin dizinine erişiminiz varsa,
httpd -M önce yüklü modülleri kontrol etmek için.
info_module (shared) isapi_module (shared) log_config_module (shared) cache_disk_module (shared) mime_module (shared) negotiation_module (shared) proxy_module (shared) proxy_ajp_module (shared) rewrite_module (shared) setenvif_module (shared) socache_shmcb_module (shared) ssl_module (shared) status_module (shared) version_module (shared) php5_module (shared)
Bundan sonra .htaccess gibi basit yönergeler Options -Indexesveya deny from allsağlamlaştıracaklar doğru çalışmaktadır.
Htaccess yeniden yazma kurallarınızı test etmek için, kuralları uyguladığınız url'yi doldurmanız, htaccess'inizin içeriğini daha büyük giriş alanına yerleştirmeniz ve "Test" düğmesine basmanız yeterlidir.
http://htaccess.mwl.be/