- Konu sahibi
- #1
Apache mod_rewrite kuralları nasıl izlenir?
Apache’de mod_rewrite kurallarını izlemek için ilgili sanal host veya sunucu yapılandırmasında
LogLevel rewrite:traceN ayarını etkinleştirin. N yerine düşük bir trace seviyesiyle başlanır; trace2 üzeri yalnız kısa teşhis için kullanılır; ardından yapılandırmayı doğrulayıp Apache’yi yeniden yükleyin ve isteği yeniden gönderirken ErrorLog çıktısını izleyin. İşiniz bitince trace ayarını kaldırın veya normal seviyeye düşürün; yüksek trace seviyeleri çok fazla log üretir ve performansı etkileyebilir.mod_rewrite izleme nasıl çalışır?
mod_rewrite ayrıntılı kayıtlarını normal erişim günlüğüne değil, Apache hata günlüğüne yazar.
rewrite:trace1 daha sınırlı, rewrite:trace3 ise kural eşleşmesi ve yönlendirme akışını incelemek için çoğu teşhis işleminde yeterli ayrıntıyı verir. Daha yüksek seviyeler iç değerlendirme ayrıntılarını artırır; yalnızca kısa süreli ve belirli bir istek üzerinde kullanılmalıdır.Aşağıdaki parça Apache 2.4’te mevcut
example.com VirtualHost yapılandırmasına kısa test için eklenir; bütün sanal host dosyasının yerine geçirilmez. Mevcut ErrorLog ve diğer ayarları koruyun:
Kod:
LogLevel warn rewrite:trace3
RewriteEngine On
RewriteRule ^/eski/(.*)$ /yeni/$1 [R=302,L]
VirtualHost içinde desenin karşılaştırdığı yol başında eğik çizgi taşır; bu nedenle
^/eski/ kullanılır. Aynı desen .htaccess kapsamına aynen taşınmaz; orada dizin öneki ve baştaki slash çıkarılır. Hata günlüğü için mevcut ErrorLog yolunu kullanın. R=302 burada kalıcı yönlendirme öncesi test amacıyla kullanılmıştır; kural doğrulandıktan sonra uygulamanızın gereksinimine göre kalıcı yönlendirme kararı verilebilir.Uygulanabilir izleme adımları
- Kuralın bulunduğu kapsamı belirleyin. Kural sanal host dosyasındaysa o sanal host’a,
.htaccessiçindeyse ilgili dizine ait Apache hata günlüğüne bakın..htaccessiçeriğinde doğrudanLogLeveltanımlamak yerine, bu ayarı Apache’nin izin verdiği sunucu, sanal host veya dizin yapılandırmasına ekleyin. - İlgili yapılandırmaya geçici olarak
LogLevel warn rewrite:trace3ekleyin. Aynı yapılandırmada zaten birLogLevelvarsa onu ezmek yerine mevcut ayarla uyumlu biçimderewrite:trace3bileşenini ekleyin. - Yapılandırmayı yeniden yüklemeden önce Apache’nin yapılandırma test komutunu çalıştırın. Test hata verirse yeniden yükleme yapmayın; bildirilen dosya ve satırdaki yazım hatasını düzeltin.
- Apache’yi kesintisiz yeniden yükleme yöntemiyle yeni ayarı etkinleştirin. Dağıtımınızın servis yönetim komutunu kullanın; yeniden başlatma yerine yeniden yükleme destekleniyorsa bunu tercih edin.
- Ayrı bir terminalde, kuralı tetikleyecek isteği gönderirken ilgili hata günlüğünü canlı izleyin. Örneğin
curl -I http://example.com/eski/ornekisteği, yanıt başlıklarıyla birlikte yönlendirme sonucunu görmenizi sağlar. - Log satırlarını istek yolu, kural numarası, eşleşme ve oluşan yeni URI açısından okuyun. Yönlendirme varsa istemcinin aldığı
Locationbaşlığını da kontrol edin. - Teşhis tamamlanınca başlangıçta kaydettiğiniz LogLevel ayarını geri yükleyin ve Apache’yi yeniden yükleyin. İzleme açık bırakılırsa hata günlüğü gereksiz biçimde büyüyebilir.
Başarılı bir eşleşmede trace çıktısında kuralın değerlendirildiğini ve yeni URI veya yönlendirme sonucunu görürsünüz. İstek beklenmedik biçimde değişmiyorsa kural deseni eşleşmiyor olabilir. Hiç trace satırı oluşmuyorsa yanlış hata günlüğünü izliyor, farklı bir sanal host’a istek gönderiyor, mod_rewrite’ı etkinleştirmemiş veya değişikliği yeniden yüklememiş olabilirsiniz.
Çıktıyı yorumlama ve doğru trace seviyesini seçme
İzleme seviyesini gereğinden yüksek seçmek yerine, sorunun türüne göre başlayın:
| İhtiyaç | Başlangıç seviyesi | Bakılacak bilgi |
|---|---|---|
| Kural tetikleniyor mu? | rewrite:trace1 | Rewrite işleminin istek sırasında çalışıp çalışmadığı |
| Hangi kural eşleşti? | rewrite:trace2 | Kural değerlendirmesi ve URI değişikliği |
| Birden fazla kuralın akışı | rewrite:trace3 | Sıra, yeniden yazma ve yönlendirme adımları |
| Ayrıntılı iç teşhis | rewrite:trace4 ve üstü | Yalnız kısa süreli, hedefli inceleme |
Bir kuralın trace içinde görünmesi, sonucun uygulama tarafından doğru işlendiği anlamına gelmez. Örneğin iç yeniden yazma başarılı olabilir ancak uygulama yeni yolu bulamayabilir. Bu durumda trace çıktısını HTTP durum kodu,
Location başlığı, erişim günlüğü ve uygulamanın kendi hata kaydıyla birlikte değerlendirin.Sık yapılan hatalar
Yanlış log dosyasını izlemek: İstek başka bir sanal host’a gidiyorsa beklediğiniz dosyada kayıt oluşmaz. Host adını ve sanal host eşleşmesini kontrol edin.
Kalıcı yönlendirmeyi test sırasında kullanmak: Tarayıcılar kalıcı yönlendirmeyi önbelleğe alabilir. Kuralı doğrularken geçici bir yönlendirme kullanmak veya
curl ile sonucu kontrol etmek daha sağlıklı teşhis sağlar.Trace ayarını kalıcı bırakmak: Ayrıntılı log, yoğun trafikte hem disk kullanımını hem de teşhis edilebilirliği kötüleştirir. Testten sonra seviyeyi düşürün.
İç yeniden yazma ile yönlendirmeyi karıştırmak: İç yeniden yazma sunucu içinde URI’yi değiştirir; istemciye yeni adres bildirmez.
R bayrağı ise istemciye HTTP yönlendirmesi gönderir. Bu farkı hem trace sonucunda hem de Location başlığında kontrol edin.Sık sorulan sorular
Trace çıktısı neden normal erişim günlüğünde görünmüyor?
mod_rewrite’ın ayrıntılı teşhis kayıtları hata günlüğüne yazılır. Erişim günlüğü ise çoğunlukla istek, durum kodu ve yanıt boyutu gibi sonuç bilgilerini gösterir; bu nedenle iki günlüğü birlikte incelemek gerekir.
Sadece tek bir isteği izlemek mümkün mü?
LogLevel ayarı genellikle bir yapılandırma kapsamındaki istekleri etkiler. Bu yüzden ayarı kısa süreli açın, isteği hemen tekrarlayın ve ardından kapatın. Yoğun üretim trafiğinde yüksek seviyeyi uzun süre açık bırakmayın.