từ chối danh sách thư mục với htaccess


103

Tôi có một thư mục, ví dụ: /public_html/Davood/ và quá nhiều thư mục con trong thư mục, ví dụ: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Tôi muốn thêm một tệp htaccess vào /public_html/Davood/Để từ chối DirectoryListing In/Davood And Sub Folders, Có thể không?


3
Tôi không hiểu tại sao Options All -Indexeskhông hoạt động như trong một vài câu trả lời!
Fr0zenFyr

1
@ Fr0zenFyr nó phụ thuộc vào cấu hình máy chủ web, nếu AllowOverride All, công trình
DJafari

Câu trả lời:


124

Tùy chọn -Các chỉ mục sẽ hoạt động để ngăn danh sách thư mục.

Nếu bạn đang sử dụng tệp .htaccess, hãy đảm bảo rằng bạn có ít nhất cài đặt "tùy chọn cho phép ghi đè" trong tệp cấu hình apache chính của mình .


1
thay đổi điều này không bất cứ điều gì
minhajul

69

Hãy thử thêm cái này vào .htaccesstệp trong thư mục đó.

Options -Indexes

Điều này có thêm thông tin.


Vâng, tôi đã nghĩ - Lập chỉ mục vô hiệu hóa danh sách thư mục, thay vào đó nó chặn tất cả nội dung từ thư mục ... Có ai biết tại sao không?
Michael Fever

Tất cả những gì tôi có thể nghĩ là có một số vấn đề với cấu hình máy chủ. Thử bật rewritemô-đun và cài đặt thư mục thành AllowOverride All. Nếu tất cả những gì đã có và những gì bạn nhận xét là đúng, thì tôi hẳn là quá may mắn khi được Options All -Indexeslàm việc trong mọi dự án trên các máy chủ khác nhau.
Fr0zenFyr

35

Nếu Options -Indexes không hoạt động như Bryan Drewery đề xuất, bạn có thể viết một phương thức đệ quy để tạo tệp index.php trống.

Đặt cái này bên trong thư mục cơ sở của bạn mà bạn muốn bảo vệ, bạn có thể đặt tên nó là gì (tôi khuyên bạn nên đặt 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);
            }
        }
    }
}

?>

Các tệp index.php trống này có thể dễ dàng bị xóa hoặc ghi đè và chúng sẽ giữ cho các thư mục của bạn không thể liệt kê được.


8
Mặc dù một tệp trống không phải là vấn đề lớn, nhưng giải pháp tốt hơn có thể là sử dụng các liên kết tượng trưng , bằng cách đó, nó tiết kiệm một chút dung lượng và anh ấy sẽ chỉ cần sửa đổi 1 tệp nếu anh ấy chọn hiển thị một số loại thông báo thống nhất. thay vì một trang trống.
daalbert

18

Để hiển thị lỗi Forbidden, hãy bao gồm các dòng này trong tệp .htaccess của bạn:

Options -Indexes 

Nếu chúng ta muốn lập chỉ mục các tệp của mình và hiển thị chúng với một số thông tin, thì hãy sử dụng:

IndexOptions -FancyIndexing

Nếu chúng tôi muốn một số tiện ích mở rộng cụ thể không hiển thị, thì:

IndexIgnore *.zip *.css

1
.httaccesshoặc .htaccess?
NaveenDA,

8

Tùy chọn -Các chỉ số hoàn toàn phù hợp với tôi,

đây là .htaccesstệp:

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


   ....etc stuff

</IfModule>

Trước : nhập mô tả hình ảnh ở đây

Sau :

nhập mô tả hình ảnh ở đây


4

Có hai cách :

  1. sử dụng .htaccess: Options -Indexes

  2. tạo index.html trống


3
Options -Indexes

Tôi phải thử tạo tệp .htaccess thư mục hiện tại mà tôi muốn không cho phép liệt kê chỉ mục thư mục. Nhưng, xin lỗi, tôi không biết về đệ quy trong mã .htaccess.

Thử nó.


2

Đồng ý rằng

Options -Indexes

sẽ hoạt động nếu máy chủ chính được định cấu hình để cho phép ghi đè tùy chọn, nhưng nếu không, điều này sẽ ẩn tất cả các tệp khỏi danh sách (vì vậy mọi thư mục đều trống):

IndexIgnore *

2

Tùy chọn -Indexes trả về lỗi 403 bị cấm cho một thư mục được bảo vệ. Hành vi tương tự có thể được khắc phục bằng cách sử dụng Chuyển hướng sau trong htaccess:

RedirectMatch 403 ^/folder/?$ 

Điều này sẽ trả về một lỗi bị cấm cho example.com/folder/ .

Bạn cũng có thể sử dụng mod-rewrite để cấm yêu cầu thư mục.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Nếu htaccess của bạn là trong thư mục mà bạn đang đi để cấm, mô hình thay đổi RewriteRule từ ^ thư mục /? $ Để ^ $ .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.