Apache HTTP Sunucusu Sürüm 2.4
Hata Yanıtlarının Kişiselleştirilmesi
Apache HTTP Sunucusu 4xx veya 5xx HTTP durum kodları ile ilgili olaylarda soysal hata yanıtları üretse de bu yanıtlar site kullanıcılarına aşırı sade, bilgi vermez ve hatta korkutucu gelebilir. Daha dostça yazılmış, İngilizce değil de kendi dilinizde ve belki sayfalarınızın yerleşimine uygun daha hoş satırlarda özel hata yanıtları üretmek isteyebilirsiniz.
Kişiselleştirilmiş hata yanıtları, bir hata durumuna göre tasarlanmış herhangi bir HTTP durum kodu (yani 4xx ve 5xx kodlarından biri) için tanımlanabilir.
Ek olarak bir değer kümesi de sağlanmıştır. Böylece hata belgeleri, Sunucu taraflı İçerik Yerleştirme kullanılarak bu değişkenlerin değerlerine göre özelleştirilebilir. İsterseniz bunun yerine bir CGI programı veya devingen bir eylemci (PHP, mod_perl, vs.) kullanarak da bu değişkenlerin değerlerine göre hata sayfalarınızı üretebilirsiniz.
Yapılandırma
Kişiselleştirilmiş hata belgeleri ErrorDocument
yönergesi kullanılarak yapılandırılabilir. Bu
yönerge küresel bağlamda olabileceği gibi sanal konak ve dizin
bağlamlarında da kullanılabilir. AllowOverride
yönergesine FileInfo
atanarak .htaccess
dosyalarında da kullanılabilir.
ErrorDocument 500 "Pardon, galiba bizim betik hata verdi." ErrorDocument 500 /cgi-bin/hata-kurtarma ErrorDocument 500 http://error.example.com/server_error.html ErrorDocument 404 /ozuru_kabahatinden_buyuk/yok.html ErrorDocument 401 /Uyeler/NASIL_uye_olunur.html
ErrorDocument
yönergesinin sözdizimi:
ErrorDocument <3-rakamlı-kod> <eylem>
eylem şunlardan biri olabilir:
- Yönlendirmenin yapılacağı dahili adres (eylem bir "/" ile başlıyorsa).
- Yönlendirmenin yapılacağı harici adres (eylem geçerli bir URL ise).
- Gösterilecek metin (yukardakilerin hiçbiri yoksa). Birden fazla sözcük içeriyorsa tırnak (") içine alınmalıdır.
Yerel bir adrese yönlendirme yapılırken ek ortam değişkenleri de atanarak yanıt daha da özelleştirilebilir. Bunlar harici URL'lere gönderilmez.
Kullanılabilen Değişkenler
Hata durumunu açıklayacak veya hata günlüğüne daha açıkça kaydedilebilecek bazı bilgilerin aktarılması koşuluyla, başka bir adrese yönlendirme kullanışlı olabilir
Hata yönlendirmesi yapılırken bunu sağlamak için ek ortam değişkenleri tanımlanır. Bu değişkenlerin isimleri, özgün istekle sağlanan başlık isimlerinin önüne 'REDIRECT_' dizgesi getirilerek üretilir. Böylece özgün istek bağlamından hata belgesi üretilebilir.
Örneğin, aşağıdaki gibi, daha yararlı olacak ek ortam değişkenleri alabilirsiniz.
REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/jpeg, image/png
REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8
REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=client.example.com
REDIRECT_SERVER_NAME=www.example.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/2.2.15
REDIRECT_URL=/cgi-bin/buggy.pl
REDIRECT_
ortam değişkenleri, yönlendirme öncesi varolan
ortam değişkenlerinden üretilir. Bunlar önlerine REDIRECT_
getirilerek yeniden isimlendirilir. Örneğin,
HTTP_USER_AGENT
değişkeni
REDIRECT_HTTP_USER_AGENT
haline gelir.
REDIRECT_URL
, REDIRECT_STATUS
ve
REDIRECT_QUERY_STRING
mutlaka atanır. Diğer başlıklarla
ilgili olanlar ise hata durumu öncesinde mevcut oldukları takdirde
üretilirler.
Eğer ErrorDocument
hedefi bir
harici yönlendirme ise bunların hiçbiri
üretilmez (sunucunun bulunduğu konağı hedeflese bile http:
ile başlayan herşey harici yönlendirme sayılır).
Özel Hata Yanıtları
Hata yanıtınızı üretmek için sunucu taraflı içerik yerleştirme, bir CGI betiği veya başka bir eylemciyi devingen eylemci olarak kullanıyorsanız, bu yanıtı özelleştirmek için bu kullanıma özel üretilmiş ortam değişkenlerini kullanmak isteyebilirsiniz.
ErrorDocument
yönergesi bir CGI
betiğine bir yerel 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 verilmelidir. Örneğin, bir
Perl betiği şunları içerebilirdi:
... print "Content-type: text/html\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
) eklemesinin
gerekli oluşuna dikkat ediniz. Aksi takdirde, Location:
başlığı etkisiz olabilir.
Çok Dilli Özel Hata Belgeleri
Apache HTTP Sunucusunun kurulumunda, 16 dile çevrilmiş özel hata
iletileri belgeleri içeren bir dizin bulunmaktadır. Ayrıca,
conf/extra
yaplandırma dizininde bu özelliği etkin kılmak
için yapılandırmaya dahil edilebilecek bir yapılandırma dosyası
vardır.
Sunucu yapılandırma dosyanızda şöyle satırlar görebilirsiniz:
# Multi-language error messages #Include conf/extra/httpd-multilang-errordoc.conf
Bu Include
satırını açıklama olmaktan çıkarırsanız
bu özelliği etkinleştirmiş olursunuz. Böylece, istemcinin tarayıcısında
belirtilmiş dil tercihine uygun dil uzlaşımlı hata iletileri
sağlanır.
Ek olarak, bu belgeler çeşitli REDIRECT_
değişkenleri
içerir. Böylece, son kullanıcıya neler olduğu ve şimdi ne yapması
beklendiği hakkında ek bilgiler sağlanabilir.
Bu belgeleri istediğiniz kadar özelleştirebilir, kullanıcıya siteniz hakkında ve orada bulabilecekleri şeylere dair faydalı bilgiler de sağlayabilirsiniz.
Bu özelliği kullanmak için mod_include
ve
mod_negotiation
etkin kılınmalıdır.