Hata Yanıtlarının Kişiselleştirilmesi - Apache HTTP Sunucusu

Apache Server 2.0

Apache HTTP Sunucusu Sürüm 2.0

<-

Hata Yanıtlarının Kişiselleştirilmesi

Apache, bazı sorunlara ve hatalara karşılık vereceği yanıtların yapılandırabilmesini mümkün kılan ek bir işlevselliğe sahiptir.

Site yöneticisi tarafından kişiselleştirilebilen bu tür yanıtlar, sunucu belli hatalar veya sorunlarla karşılaştığında etkin kılınmak üzere tanımlanabilir.

Bir betik bir hata nedeniyle bir "500 Server Error" yanıtının verilmesine sebep olursa bu yanıt yerine başka bir adrese yönlendirilerek (dahili veya harici) veya doğrudan daha dostça bir metin sunulabilir.

top

Davranış

Eski Davranış

NCSA httpd 1.3, çoğunlukla kullanıcıya anlamsız gelen ve sebebiyle kavramsal bir bağ kurulamayan günlük kayıtları üreten, can sıkıcı bazı hata/sorun yanıtları döndürürdü.

Yeni Davranış

Sunucudan NCSA kodlu iletiler yerine

  • başka bir metin göstermesi,
  • istemciyi başka bir yerel adrese yönlendirmesi veya
  • istemciyi bir harici adrese yönlendirmesi

istenebilir. Başka bir adrese yönlendirme, hata veya sorunu daha iyi açıklamakta kullanılabilecek bazı bilgilerin aktarılması şartıyla oldukça kullanışlı olabilir.

Apache, buna olanak vermek için CGI benzeri yeni ortam değişkenleri tanımlamıştır:

REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/x-xbitmap, image/jpeg
REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX A.09.05 9000/712)
REDIRECT_PATH=.:/bin:/usr/local/bin:/etc
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=ooh.ahhh.dom
REDIRECT_SERVER_NAME=batti.balik.yan.gider.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/0.8.15
REDIRECT_URL=/cgi-bin/hatalar.pl

REDIRECT_ önekine dikkat edin.

Yeni adrese (hedefin bir CGI betiği veya SSI sayfası olduğu kabulüyle) en azından REDIRECT_URL ve REDIRECT_QUERY_STRING değişkenleri aktarılır. Diğer değişkenler ise sadece hata veya sorunun öncesinde mevcut oldukları takdirde aktarılacaklardır. Eğer harici yönlendirmeyi ErrorDocument yönergesi üzerinden yapıyorsanız bunlara None değeri atanacaktır. (Yönlendirme adresi http: ile başlıyorsa adres aynı sunucuya ait olsa bile bu bir harici yönlendirme olarak ele alınır.)

top

Yapılandırma

ErrorDocument yönergesinin .htaccess dosyalarında kullanılması sadece AllowOverride yönergesine uygun bir değer atanmışsa mümkündür.

Bazı örnekler:

ErrorDocument 500 /cgi-bin/hata-kurtarma
ErrorDocument 500 "Pardon, galiba bizim betik hata verdi."
ErrorDocument 500 http://xxx/
ErrorDocument 404 /ozuru_kabahatinden_buyuk/yok.html
ErrorDocument 401 /Uyeler/NASIL_uye_olunur.html

Burada sözdizimi şöyledir:

ErrorDocument <3-rakamlı-kod> <eylem>

eylem şunlardan biri olabilir:

  • Gösterilecek metin. Metnin başına bir tırnak imi (") konmalıdır. (Bu tırnak öneki çıktıda gösterilmez.)
  • Yönlendirmenin yapılacağı harici adres.
  • Yönlendirmenin yapılacağı dahili adres.
top

Özel Hata Yanıtları ve Yönlendirme

Apache’nin yönlendirme ile ilgili davranışı bir CGI betiği veya SSI sayfası sözkonusu olduğunda bazı ek ortam değişkenleri ile yapılandırılabilir.

Eski Davranış

Yönlendirme yapılan betikte standart CGI değişkenleri kullanılırdı. Yönlendirmenin kaynağı ile ilgili bir belirtiye rastlanmazdı.

Yeni Davranış

Yönlendirme yapılan betikte kullanılmak üzere özel olarak tanımlanmış ortam değişkenleri vardır. Her değişkenin ismi REDIRECT_ ile başlar. REDIRECT_ ortam değişkenleri, yönlendirme öncesinde tanımlanmış CGI ortam değişkenlerinin isimlerinin başına REDIRECT_ öneki getirilerek oluşturulur. Yani, HTTP_USER_AGENT değişkeni REDIRECT_HTTP_USER_AGENT haline gelir. Bunlara ek olarak, betiğe olayın izini sürmekte yardımcı olması için REDIRECT_URL ve REDIRECT_STATUS değişkenleri tanımlanmıştır. Erişim günlüğüne özgün adresle birlikte yönlendirme adresi de kaydedilir.

Eğer ErrorDocument yönergesi bir yerel CGI betiğine yönlendirme belirtiyorsa, hatanın kaynağı hakkında istemciye bilgi vermek amacıyla betiğin çıktısında bir "Status:" başlık alanına yer verilmesi önerilir. Örneğin, bir Perl betiği şunları içerebilirdi:

...
print "Content-type: text/html; charset=UTF-8\n";
printf "Status: %s durumu saptandı.\n", $ENV{"REDIRECT_STATUS"};
...

Eğer betik, 404 Not Found gibi, belli bir hata durumunu ele almaya adanmışsa duruma özel kod ve hata metni kullanılabilir.

Eğer yanıt, (istemci taraflı yönlendirme yapılırken) bir Location: başlığı da içeriyorsa betiğin çıktıya uygun bir Status: başlığı (302 Found gibi) eklemesinin gerekli oluşuna dikkat ediniz. Aksi takdirde, Location: başlığı etkisiz olabilir.