.Htaccess RewriteRule çalışmıyor hata ayıklama

Feb 11 2012

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 benim RewriteRulehala bir etkisi yoksa, hata ayıklamak için daha ne yapabilirim?

Yanıtlar

146 ThinkingMonkey Feb 11 2012 at 03:23

.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
53 caitriona Feb 13 2014 at 21:58

'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.

32 jgpATs2w May 05 2013 at 04:06

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.

6 Cez Feb 11 2012 at 03:46

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.

5 PeterA Dec 19 2018 at 00:07

Üç 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ı!

3 AbhishekGurjar Apr 27 2017 at 14:01

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.

1 GaneshKandu Jan 25 2018 at 18:10

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/