Apache web sunucusuna ulaşan bir istek, dosya yerine bir klasöre işaret ediyorsa aşağidaki 3 işlemden birisi yapılır;
- Klasörün içindeki öngörülen dosyayı (index.php index.html,index.htm vb.) istemciye göster
- Klasörün içeriği ile ilgili otomatik bir sayfa oluştur
- ‘Permission Denied’ hata mesajı oluştur
İlk iki seçenek tamamen mod_autoindex module tarafindan yönetilir. Bu module apache ile öngörülen olarak derlenir ve aktif hale getirilir.
modülün aktif olup olmadığını;
1 |
[root@omeroner ~]# apachectl -t -D DUMP_MODULES | grep autoindex_module |
komut satırından kontrolünü yapabiliriz.
mod_autoindex modulü Indexes komutu ile kontrol edilir.
1 |
Options +Indexes |
Otomatik sayfaların oluşturulmasını ve klasörün içeriğinin görüntülenmesini istemiyorsak
1 |
Options -Indexes |
Daha kullanışlı bir şekilde bazı alanlar için bu özelliği açıp bazıları için kapatabiliriz.
1 2 3 4 5 6 7 |
<Location /> Options -Indexes </Location> <Location /ftp/> Options +Indexes </Location> |
Güvenlik
Klasörlerin içeriğini otomatik olarak görüntülemek büyük bir güvenlik açığına sebep olur. Gerekli olmadı sürece bu özellik kapalı olmalıdır. DirectoryIndex ile öngörülen dosyayı belirlemek
Genel olarak bir klasör istendiğinde,bütün web sunucuları index.html veya index.htm adında bir dosyayı öngörülen olarak kullanıcıya sunarlar. Örneğin aşagidaki gibi bir URL için;
ilk olarak index.html dosyasına bakıcaktır. Bu davranış biçimi apache’ye daha derlenirken eklenmiştir ve DirectoryIndex komutuyla yönetilir.Öngörülen şekilde kurulan bir apache sunucusunda ayar dosyasında aşağıdaki gibi bir parametre yer alır.
1 |
DirectoryIndex index.html |
Bu komutla apache, herhangi bir URL’nin (dosya adı içermeyen URL’ler) sonuna index.html ekini ekler.
Böylece herhangi bir klasör için yapılan istek aslında https://omeroner.com/index.html şeklinde işlem görür.
Apache’deki bu davranışı değiştirmek veya daha fazla seçenek vermek bizim elimizde;
1 |
DirectoryIndex index.html index.htm index.shtml index.php home.html index.cgi default.html |
Bu özellik kullanılarak daha gelişmiş cözümlerde üretelebiliriz.
Örnek vericek olursam, bir klasör için istek yapıldığında, klasör bizim belirlediğimiz herhangi bir öngörülen dosya içermiyorsa kullanıcıya 404 hata sayfası gösterilebilir. Bunun icin full path(tam yol) tanımlanmalıdır.
Örneğin;
1 |
DirectoryIndex index.html index.htm /cgi-bin/hata404.cgi |
Yukarda yaptığımız ayarlamaya göre, bir klasöre (DocumentRoot) eğer klasörde index.html ve index.htm dosyalarından biri bulunmuyorsa hata404.cgi dosyasını client yani kullanıcıya gösterir.
Otomatik olarak klasorler icin icerik gosteren sayfalar nasil yaratiliyor?
Eğer “DirectoryIndex index.html index.htm” satırındaki dosyalardan birisi klasörde bulunamaz ise mod_autoindex otomatik olarak içerik ile ilgili bir html sayfasi hazırlayarak istemciye gönderir.
Bu sayfa üç bölümden olusur;
- Secenege bagli “baslik” (header)
- Dosyalarin listesi
- Secenege bagli beni-oku dosyasi (read-me)
- Indeksleme Secenekleri
Çoğu zaman indeksleme “FancyIndexing” seçeneği aktif hale getirilerek kullanılır. Bunun için aşağıdaki komutu ayar dosyasına girmek yeterlidir.
1 |
IndexOptions FancyIndexing |
Örnek :
1 |
IndexOptions FancyIndexing SuppressColumnSorting NameWidth=20 SuppressDescription DescriptionWidth=100 |
indeks sayfalarında görünmesini istemediğimiz dosya tipleri olabilir.
IndexIgnore direktifi ile berlirlenen dosyaların indeks sayfalarında görünmesi engellenir.
1 |
IndexIgnore . omer* *.bak HEADER* README* *config* *oner* |
. kullanilmasi ile içinde bulunulan klasör olduğu anlatılmaktadır.Bu direktif sunucu sevisiyesinde kullanilabilir ve asla .htaccess icinde iken aktif hale gelmez. nokta(.) yerine ful path de verebiliriz.
Konu ile ilgili daha ayrıntılı bilgiye buradan ulaşabilirsiniz.