Bu belgede, bir istekte belirtilen URL’nin sunulacak dosyanın dosya sistemindeki yerini bulmak için Apache HTTP Sunucusu tarafından nasıl kullanıldığı açıklanmaktadır.
DocumentRoot
Yapılan bir isteğe hangi dosyanın sunulacağına karar verirken
httpd’nin öntanımlı davranışı istek için URL yolunu (URL’den konak ismi
ve port ayrıldıktan sonra kalan kısım) alıp bunu yapılandırma dosyasında
Örneğin, /var/http/html
atanmış olsun.
http://mesela.dom/balıklar/zargana.html
şeklindeki bir
istek için istemciye /var/http/html/balıklar/zargana.html
dosyası sunulur.
httpd ayrıca, sunucunun birden fazla konak için istek kabul etmesini
sağlayan sanal barındırmaya da muktedirdir. Bu
durumda her sanal konak için ayrı bir
Bazen dosya sisteminde doğrudan FollowSymLinks
veya SymLinksIfOwnerMatch
atanmadıkça httpd olası güvenlik açıklarına karşı öntanımlı olarak
sembolik bağları izlemez.
Bundan başka, dosya sisteminin farklı parçalarını belge kök dizini
altında göstermek için
yapılandırması ile
http://mesela.dom/belgeler/dizin/dosya.html
URL’si için
dosya sistemindeki /var/http/dizin/dosya.html
dosyası
sunulacaktır. Hedef dizindeki dosyaları birer
Biraz daha fazla esnekliğin gerektiği durumlarda
satırı sayesinde http://mesela.dom/~user/cgi-bin/betik.cgi
URL’si /home/user/cgi-bin/betik.cgi
dosyası ile
eşleştirilir ve dosya bir CGI betiği olarak çalıştırılırdı.
Geleneksel olarak Unix sistemlerinde belli bir kullanıcının (örn,
birisi) ev dizinine ~birisi/
şeklinde atıfta
bulunulabilir.
Güvenlik sebebiyle kullanıcıların ev dizinlerine doğrudan HTTP erişimi
vermek uygun olmaz. Bu bakımdan, kullanıcının ev dizini altında HTTP
erişimi verilecek dosyaların bulunduğu dizini belirtmek için Userdir public_html
yapılandırması ile
yukarıdaki gibi bir URL kullanıcının ev dizini (/etc/passwd
dosyasında belirtilir) /home/birisi/
altında yer alan
/home/birisi/public_html/dosya.html
dosyası ile
eşleşirdi.
Ev dizininin yerinin /etc/passwd
dosyasında belirtilmediği
sistemlerde kullanılmak üzere Userdir
yönergesinin başka
kullanım şekilleri de vardır.
Bazı kişiler (genellikle URL üzerinde %7e
olarak
kodlanması sebebiyle) "~" simgesini biçimsiz bulabilir ve kullanıcı
dizinlerini imlemek için başka bir karakter kullanmayı tercih
edebilirler. Bu işlevsellik http://mesela.dom/sayfalar/birisi/dosya.html
URL’si ile /home/birisi/public_html/dosya.html
dosyasını
eşlemek için AliasMatch
yönergesi şöyle
kullanılabilirdi:
Yukarıdaki bölümlerde açıklanan yapılandırma yönergeleri httpd’ye
içeriği dosya sisteminin belli bir yerinden alıp istemciye göndermesini
söyler. Bazen istemciye, istediği içeriğe farklı bir URL ile
erişebileceğini ve bu URL için ayrı bir istek yapması gerektiğini
bildirmek gerekir. Bu işleme yönlendirme adı verilir ve bu
işlevsellik /foo/
dizininin içeriğinin /bar/
adında yeni bir dizine taşınması halinde istemciye yeni konumun
bildirilmesi şöyle sağlanabilirdi:
Bu atama sayesinde /foo/
ile başlayan URL yolları
mesela.dom
sunucundaki /bar/
dizini altındaki
içeriğe yönlendirilmektedir. Yönlendirmeyi aynı sunucu üzerinde yapmak
zorunda değilsiniz, bu yönerge ile başka bir sunucuya da yönlendirme
yapabilirsiniz.
httpd ayrıca, yeniden yazma ile ilgili daha karmaşık sorunlara çözüm
olarak
Bundan başka, bir sitedeki tüm sayfalara yapılan istekleri başka bir siteye geçici olarak yönlendirmek için şöyle bir şey yapabilirsiniz:
httpd ayrıca, uzak sunuculardaki belgelerin yerel sunucunun URL alanına getirilmesini de mümkün kılar. Bu tekniğe HTTP sunucunun belgeleri uzak bir sunucudan alıp istemciye sunmasını sağlayarak bir vekil sunucu gibi davranması nedeniyle ters vekalet adı verilir. Belgelerin istemciye özkaynağın bulunduğu sunucudan geliyormuş gibi değilde doğrudan isteği yaptığı sunucudan geliyormuş gibi sunulması nedeniyle bu işlem normal vekaletten farklıdır.
Aşağıdaki örnekte, istemci /foo/
dizini altından bir belge
istemekte, sunucu ise bu belgeyi dahili.mesela.dom
üzerindeki /bar/
dizininden alıp istemciye yerel sunucudan
geliyormuş gibi sunmaktadır:
dahili.mesela.dom
sunucusundan kaynaklanan yönlendirmeleri yeniden yazar, böylece bunların
yerel sunucudaki yerleri belirlenmiş olur. Benzer şekilde,
Yalnız, belgelerin içindeki hiperbağların yeniden yazılmayacağına
dikkat ediniz. Dolayısıyla, belge içinde
dahili.mesela.dom
’u ismiyle hedef alan mutlak hiperbağlar
varsa bunlar istemci tarafından vekil sunucudan değil doğrudan
dahili.mesela.dom
’dan istenecektir. Bir sayfanın içindeki bu
bağları (ve diğer içeriği)
Ayrıca, Üçüncü parti modüller arasında HTML ve XHTML’de hiperbağları yeniden yazabilen mod_proxy_html adında bir modül de vardır.
Daha güçlü ikameler gerektiğinde
Kaçınılmaz olarak, dosya sisteminde mevcut olmayan dosyalar için de istek yapılacaktır. Bunun çeşitli sebepleri olabilir. Bazı durumlarda bu, belgelerin yerlerininin değiştirilmesinin bir sonucu olabilir. Bu durumda yapılacak en iyi şey, istemciyi belgeyi yeni yerinden istemesi için bilgilendirmek amacıyla URL yönlendirmesi kullanmaktır. Bu şekilde, içeriğin yeri değişse bile eski yer imlerinin ve hiperbağların çalışmaya devam edeceklerinden emin olabilirsiniz.
"Dosya orada yok" ("File Not Found") hatalarının diğer bir bildik
sebebi de URL’lerin hiperbağlarda veya doğrudan tarayıcıda kasıtlı ya da
kasıtsız, yanlış yazılmasıdır. Bu tür sorunlarda yardımcı olması için
httpd
Yerinde bulunmayan içeriğin bulunması çabalarının tümü Apache’nin 404
(Dosya orada yok) HTTP durum kodlu bir hata sayfası döndürmesine yol
açar. Bu sayfanın içeriği
URL eşlemede kullanılabilecek diğer modüller:
index.html
bir dosyaya eşler.