Apache mod_rewrite hata ayıklama


171

Mod_rewrite ile iki ana sorun var:

1) Geçersiz bir kuralım olduğunda bildirilen anlamlı bir hata yok

resim açıklamasını buraya girin

2) Her değişikliği güvenilir bir şekilde test etmek için kromun önbelleğini silmek zorundayım. Bu roket bilimi değil, ama Ctrl + Shift + Delete tuşlarına basıp ardından Tamam'ı tıklatıp pencereyi kapatıp yeniden yüklemem gerekiyor.

Gurulardan birinin mod_rewrite kodunu verimli bir şekilde yönetmek için sırlarını paylaşmak isteyip istemediğini görmek istiyorum.


1
Puk, standart hilelerden bazılarını tartıştığım stackoverflow.com/questions/9153262/… adresine bakın.
TerryE

Yanıtlar:


283

Bir numara, yeniden yazma günlüğünü açmaktır. Apache ana genelinde veya geçerli sanal konak dosyasına (bu satırları deneyin Bu özelliği açmak için değil de .htaccess):

RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

Apache httpd 2.4 mod_rewrite RewriteLog ve RewriteLogLevel yönergelerinin yerine modül başına yeni günlük yapılandırması getirildi.

LogLevel alert rewrite:trace6

81
Bunu .htaccess içine yerleştiremezsiniz. VirtualHost yapılandırmasına koymanız gerekir.
Attila Szeremi

7
RewriteEngine OnOrada da bölüme sahip olmalısınız çünkü .htaccessdosyada sadece (yaptığım gibi) etkinleştirirseniz , hiçbir şey günlüğe kaydedilmez.
chacham15

12
günlük dosyası apache 2.4'te nerede bulunur?
Charles John Thompson III

4
2.4 günlük öğelerini ilgili hata günlüğünde bulabilirsiniz. Bu, yapılandırmanıza bağlı olabilir, ancak varsayılan Debian / Ubuntu kurulumlarında /var/log/apache2/error.log
Josiah

10
Profesyonel ipucu: Yeniden yazma günlüğünüzü kapatmayı unutmayın. Unutursanız, özellikle bir üretim sunucusunda sabit diskinizi oldukça derhal doldurursunuz.
John Hunt

132

Ben'in belirttiği gibi LogRewrite yönergesi artık Apache 2.4'te mevcut değildir. Bunun yerine LogLevel yönergesini kullanmanız gerekir. Örneğin

LogLevel alert rewrite:trace6

Bkz. Http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging


22
bununla ilişkili günlük dosyası nerede?
Charles John Thompson III

8
@CharlesJohnThompsonIII - Günlük dosyası hata günlüğüdür (ErrorLog yönergesi ile belirtilir). Dokümanlar başına, grep ile sadece yeniden yazma mesajlarını alabilirsiniz:tail -f error_log|fgrep '[rewrite:'
billynoah


1
Ben emin olmak zorunda AllowOverridekaldı All!
Michael

25

Temel URL çözümlemesi için, manuel tarayıcı yerine testi yapmak wgetveya curlyapmak için bir komut satırı getirici kullanın . O zaman herhangi bir önbelleği temizlemek zorunda değilsiniz; sadece test oklarını yeniden çalıştırmak için yukarı ok ve bir kabuk girin.


14
Başka bir hile, Chrome "Porno modu" (Ctl + Shift + N) kullanmaktır. Pencereyi kapattığınızda, önbelleğe alınmış oturum içeriği çöpe atılır.
TerryE

Bence Firefox'un "özel oturumu" da geziyor. Ancak, bu bağlamın her pencere için olduğunu mu söylüyorsunuz (yani Chrome'u kapatmıyorsunuz?)
kapatmıyorsunuz

2
AFAIK, Chrome ve Ff, Ff'nin özel modda olan veya olmayan tek bir işlem olarak çalışması bakımından farklıdır. Chrome ile, her sekme veya pencere ayrı bir işlem olarak çalışır ve özel modda ayrı ayrı olabilir; özel bir pencereyi / sekmeyi kapatırsanız içerik çöpe atılır.
TerryE

1
FF için PrivateTab eklentisi bunu yapar. Her sekme ayrı ayrı çalışır.
Javid

Bu yöntem aynı zamanda yönlendirmeleri de gösterir! Makine apache yapılandırma dosyasına erişimi olmayan biri için güzel.
Geof Sawaya

14

İşte htaccess test cihazı .

Belirli bir URL için hangi koşulların test edildiğini, hangilerinin ölçütleri karşıladığını ve hangi kuralların uygulandığını gösterir.

Yine de bazı aksaklıklar var gibi görünüyor.


2
Benim için herhangi bir kod olmadan son satırda yeşil bir yürütme kuralı gösterdi.
Andy

@thombr daha kesin olabilir misiniz, lütfen? Bağlantı çalışmıyor? Yoksa alet mi? Tam olarak ne işe yaramıyor? Ve bu neden bu soru bağlamında alakalı?
Andy

1
Bu, URL'nin beklendiği gibi dönüştürüldüğünü söylüyor ... ancak gerçek sunucuda
Michael

@michael, yapılandırmanızda yalnızca test edilen kural mı? Mod_rewrite gerçekten kurulu ve aktif mi?
Andy

Görünüşe göre geçersiz kılmalar etkinleştirilmedi
Michael

3

Ben'in cevabına dayanarak, Linux'ta apache çalıştırırken aşağıdakileri yapabilirsiniz (benim durumumda Debian).

Önce rewrite-log.load dosyasını oluşturun

/etc/apache2/mods-availabe/rewrite-log.load

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

Sonra girin

$ a2enmod yeniden yazma günlüğü

bunu takiben

$ service apache2 yeniden başlatma

Ve yeniden yazma kurallarınızda hata ayıklamayı bitirdiğinizde

$ a2dismod yeniden yazma günlüğü && service apache2 restart


Bu işe yaramadı. Sandino @ envy alıyorum: ~ $ sudo service apache2 restart * Web sunucusu apache2 yeniden başlatılıyor [başarısız] * Apache2 yapılandırması başarısız oldu. Yapılandırma testinin çıktısı: AH00526: /etc/apache2/mods-enabled/rewrite-log.load satırının 1 satırındaki sözdizimi hatası: Geçersiz komut 'RewriteLog', sunucu yapılandırmasına dahil olmayan bir modül tarafından yanlış yazılmış veya tanımlanmış
sandino

3
@sandino, hangi apache sürümünü kullanıyorsunuz? Bu sözdizimi 2.4 için değiştirilmiş gibi görünüyor, bunun yerine kullanın: LogLevel warn rewrite:trace8veya LogLevel info rewrite:trace88, 1-8
insaner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.