tolak daftar direktori dengan htaccess

103

Aku punya folder, misalnya: /public_html/Davood/ dan sub folder terlalu banyak dalam folder, misalnya: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Saya ingin menambahkan file htaccess ke /public_html/Davood/Untuk menolak DirectoryListing Di /DavoodDan Sub Folder, Mungkinkah?

DJafari
sumber
3
Saya tidak melihat mengapa Options All -Indexestidak berhasil seperti dalam beberapa jawaban!
Fr0zenFyr
1
@ Fr0zenFyr itu tergantung pada konfigurasi server web, jika AllowOverride All, berfungsi
DJafari

Jawaban:

124

Opsi -Indeks seharusnya berfungsi untuk mencegah daftar direktori.

Jika Anda menggunakan file .htaccess pastikan Anda memiliki setidaknya pengaturan "allowoverride options" di file konfigurasi apache utama Anda .

PPC-Coder
sumber
1
ini tidak mengubah apa pun
minhajul
69

Coba tambahkan ini ke .htaccessfile di direktori itu.

Options -Indexes

Ini memiliki lebih banyak informasi.

Bryan Drewery
sumber
Ya saya pikir -Indexes menonaktifkan daftar direktori, alih-alih memblokir semua konten dari folder ... Apakah ada yang tahu mengapa?
Michael Fever
Yang bisa saya pikirkan adalah ada masalah dengan konfigurasi server. Coba aktifkan rewritemodul, dan pengaturan direktori ke AllowOverride All. Jika semua itu sudah ada, dan apa yang Anda komentari itu benar, saya pasti terlalu beruntung untuk bisa Options All -Indexesbekerja di setiap proyek di server yang berbeda.
Fr0zenFyr
35

Jika Options -Indexestidak berfungsi seperti yang disarankan Bryan Drewery, Anda dapat menulis metode rekursif untuk membuat file index.php kosong.

Tempatkan ini di dalam folder dasar Anda yang ingin Anda lindungi, Anda dapat menamainya apa saja (saya akan merekomendasikan index.php)

<?php

recurse(".");

function recurse($path){
    foreach(scandir($path) as $o){
        if($o != "." && $o != ".."){
            $full = $path . "/" . $o;
            if(is_dir($full)){
                if(!file_exists($full . "/index.php")){
                    file_put_contents($full . "/index.php", "");
                }
                recurse($full);
            }
        }
    }
}

?>

File index.php kosong ini dapat dengan mudah dihapus atau ditimpa, dan mereka akan membuat direktori Anda tidak dapat didaftarkan.

Topan
sumber
8
Meskipun file kosong bukanlah masalah besar, solusi yang lebih baik mungkin menggunakan tautan simbolik , dengan cara itu menghemat sedikit ruang, dan dia hanya perlu mengubah 1 file jika dia memilih untuk menampilkan semacam pesan seragam bukannya halaman kosong.
daalbert
18

Untuk menampilkan kesalahan Terlarang, sertakan baris berikut di file .htaccess Anda:

Options -Indexes 

Jika kami ingin mengindeks file kami dan menampilkannya dengan beberapa informasi, gunakan:

IndexOptions -FancyIndexing

Jika kita ingin beberapa ekstensi tertentu tidak muncul, maka:

IndexIgnore *.zip *.css
Vivek
sumber
1
.httaccessatau .htaccess?
NaveenDA
8

Options -Indexes bekerja dengan sempurna untuk saya,

ini .htaccessfile:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes <---- This Works for Me :)
    </IfModule>


   ....etc stuff

</IfModule>

Sebelum : masukkan deskripsi gambar di sini

Sesudah:

masukkan deskripsi gambar di sini

Saurabh Mistry
sumber
4

Ada dua cara:

  1. menggunakan .htaccess: Options -Indexes

  2. buat index.html kosong

Cakka
sumber
3
Options -Indexes

Saya harus mencoba membuat file .htaccess direktori saat ini yang ingin saya larang daftar indeks direktori. Tapi, maaf saya tidak tahu tentang rekursif dalam kode .htaccess.

Cobalah.

Jersey William
sumber
2

Setuju bahwa

Options -Indexes

seharusnya berfungsi jika server utama dikonfigurasi untuk mengizinkan penggantian opsi, tetapi jika tidak, ini akan menyembunyikan semua file dari daftar (sehingga setiap direktori tampak kosong):

IndexIgnore *
dashrb
sumber
2

Options -Indexes mengembalikan kesalahan terlarang 403 untuk direktori yang dilindungi. Perilaku yang sama dapat dicapai dengan menggunakan Pengalihan berikut di htaccess:

RedirectMatch 403 ^/folder/?$ 

Ini akan mengembalikan kesalahan terlarang untuk example.com/folder/ .

Anda juga dapat menggunakan mod-rewrite untuk melarang permintaan folder.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Jika htaccess Anda dalam folder yang Anda akan melarang, pola perubahan RewriteRule ini dari ^ folder /? $ Untuk ^ $ .

Amit Verma
sumber