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.
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.)
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.
Ö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.