Yapılandırma dosyalarındaki
yönergeler sunucunun tamamına uygulanacağı gibi sadece belli dizinler,
dosyalar, konaklar veya URL’lere uygulanmakla sınırlanabilir. Bu
belgede, yapılandırma bölümü taşıyıcılarınının veya
.htaccess
dosyalarının, yapılandırma dosyalarındaki diğer
yönergelerin etki alanlarını değiştirtirmek için nasıl kullanılacağı
açıklanmıştır.
İki temel taşıyıcı türü vardır. Taşıyıcıların çoğu her istek için
değerlendirmeye alınır. Taşıyıcılardaki yönergeler ise sadece bu
taşıyıcılarla eşleşen istekler için uygulanır. Diğer yandan,
httpd -DClosedForNow
komut satırı ile başlatıldığı
takdirde mümkün olur:
Aşağıdaki örnekte,
En sık kullanılan yapılandırma bölümü taşıyıcıları dosya sistemindeki
veya site alanındaki belli yerlerin yapılandırmalarını değiştirmekte
kullanılanlardır. Öncelikle, bu ikisi arasındaki farkları bilmek
önemlidir. Dosya sistemi disklerinizin işletim sistemi tarafından size
gösterilen halidir. Örneğin, öntanımlı kurulumda Apache httpd, Unix
sistemlerinde /usr/local/apache2
altındayken Windows
sistemlerinde "c:/Program Files/Apache Group/Apache2"
altındadır. (Bilgi: Windows için bile, Apache httpd yapılandırma
dosyalarında dosya yolu belirtilirken tersbölü değil normal bölü
karakterleri kullanılır.) Site alanı ise sunucu tarafından istemciye
sunulan dizin ağacıdır. Yani, site alanı içindeki /dir/
dizini, Apache httpd’nin Unix üzerinde dosya sistemine öntanımlı olarak
kurulduğu yer göz önüne alınarak, dosya sistemindeki
/usr/local/apache2/htdocs/dir/
dizinine karşılıktır. Site
sayfaları veritabanlarından veya başka yerlerden devingen olarak
üretilebildiğinden site alanlarının doğrudan dosya sistemine eşlenmesi
gerekli değildir.
/var/web/dir1
dizini ve alt dizinlerinde
dizin içeriğinin listelenmesi etkin kılınmaktadır.
Bir gizli.html
isimli dosyalara nerede bulunursa bulunsun
erişime izin vermeyecektir.
Dosya sisteminin belli bir yerindeki belli dosyalarla ilgili yaptırımlar
için /var/web/dir1/gizli.html
,
/var/web/dir1/subdir2/gizli.html
,
/var/web/dir1/subdir3/gizli.html
ve
/var/web/dir1/
altında bulunabilecek diğer tüm
gizli.html
dosyalarına erişimi yasaklar.
/gizli
ile başlayan URL yollarına erişimi
engeller. Özellikle, http://siteniz.mesela.dom/gizli
,
http://siteniz.mesela.dom/gizli123
ve
http://siteniz.mesela.dom/gizli/dir/dosya.html
istekleri yanında /gizli
ile başlayan diğer isteklere de
uygulanır.
Dosya sistemi ile etkileşime girmeyen herşey için
server-status
adında bir dosya
veya dizin bulunması gerekli değildir.
Belli bölümler ve yönergeler değerlendirilirken çakışan iki URL bir URL
olarak dikkate alınır.
Diğer yandan
Aynısı
fnmatch
işlevindeki gibi kabuk tarzı dosya ismi kalıpları kullanılabilir. "*"
karakteri herhangi bir karakter dizisi ile eşleşirken "?" karakteri tek
tek karakterlerle ve "[seq]" kalıbı ise seq içindeki
her karakterle eşleşir. "/" karakteri her hangi bir kalıp karakteri ile
eşleşmez; açıkça belirtilmesi gerekir.
Daha esnek bir eşleşmenin gerekli olduğu durumlar için her taşıyıcının
bir düzenli ifade karşılığı vardır.
Tüm kullanıcı dizinlerine ilişkin yapılandırmayı değiştirmek için dosya ismi kalıpları şöyle kullanılabilirdi:
Düzenli ifade bölümleri kullanarak çeşitli türlerdeki resim dosyalarına erişimi bir defada yasaklayabiliriz:
HTTP Referer
başlığı "http://www.example.com/" ile
başlamıyorsa erişimi yasaklar.
Dosya sistemi taşıyıcıları ile site alanı taşıyıcıları arasında seçim
yapmak aslında oldukça kolaydır. Dosya sisteminde bulunan nesnelere
uygulanacak yönergeler için daima
Dosya sistemindeki nesnelere erişimi kısıtlarken asla
http://siteniz.mesela.dom/dir/
için bir istek yapılmışsa
bu doğru çalışacaktır. Fakat dosya sistemi harf büyüklüğüne duyarsızsa
ne olacak? Kısıtlamanız, istek
http://siteniz.mesela.dom/DIR/
şeklinde yapılarak kolayca geçersiz kılınabilir. Halbuki
Belki de siz sırf harf büyüklüğüne duyarlı bir dosya sistemi
kullanıyorsunuz diye böyle uygulamalara ihtiyacınız olmadığını düşünüyor
olabilirsiniz, fakat aynı site alanını çok sayıda dosya sistemi konumuna
eşleyecek daha bir sürü yol bulunduğunu unutmayınız. Bu bakımdan dosya
sisteminde yapacağınız kısıtlamalarda daima dosya sistemi taşıyıcılarını
kullanmalısınız. Bununla birlikte bu kuralın da bir istisnası vardır.
Yapılandırma kısıtlamalarının bir <Location/>
bölümü
içine koyulması, bu bölüme konan yönergelerin etki alanının belli bir URL
ile sınırlı olmaması nedeniyle mükemmelen güvenlidir.
Bazı bölüm türleri başka bölüm türlerinin içinde olabilir. Bir yandan,
İç içe bölümler, aynı türdeki iç içe olmayan bölümlerin sonrasına yerleştirilir.
example.com
sitesine erişim için vekil sunucunun
kullanılmasını engelleyecektir.
Hangi yönergelere hangi yapılandırma bölümlerinde izin verildiğini
öğrenmek için yönerge bağlamına bakınız.
FollowSymLinks
ve SymLinksIfOwnerMatch
seçenekleri sadece .htaccess
dosyalarında çalışır.Yapılandırma bölümleri belli bir sıra ile uygulanır. Yapılandırma yönergelerinin yorumlanışı üzerinde önemli etkilere sahip olabilmesi nedeniyle neyin ne zaman çalıştığını anlamak çok önemlidir.
Yapılandırma bölümlerinin katıştırılma sırası şöyledir:
.htaccess
aynı anda işleme sokulur
(.htaccess
ile eğer izin verilmişse <Directory ~>
).<Directory /var/web/dir>
bölümü <Directory
/var/web/dir/subdir>
bölümünden önce işleme sokulacaktır. Eğer
aynı uzunlukta çok sayıda dizin varsa
İstek
Sonraki bölümler öncekileri geçersiz kılmak üzere işleme alınırlarsa da her modül bu geçersiz kılmaya sebep olan formu yorumlamaktan sorumludur. Belli bir modülülün yönergeleri bulunan sonraki yapılandırma bölümleri, bazı yönergelerin, tüm yönergelerin veya modül yapılandırmasının tamamının sonraki bağlamda açıkça listelenmiş modül öntanımlıları ve yönergelerle bir kavramsal "katıştırmasına" sebep olabilir.
Aliases
ve
DocumentRoots
, URL’leri dosya isimlerine eşlemek için
kullanılırken) hemen önce uygulanan bir
<Location>
/<LocationMatch>
dizisi
vardır. Bu dizinin sonuçları isim dönüşüm aşaması tamamlandıktan sonra
tamamen elden çıkarılır.
Aşağıdaki yapay örnekte katıştırma sırası gösterilmiştir. Hepsinin aynı isteğe uygulandığı varsayımıyla, bu örnekteki yönergeler A > B > C > D > E sırasıyla uygulanacaktır.
Daha somut bir örnek olarak aşağıdakini ele alalım.