Làm cách nào để tắt chức năng duyệt thư mục?


Câu trả lời:


420

Tạo tệp .htaccess chứa dòng sau:

Options -Indexes

Đó là một lựa chọn. Một tùy chọn khác là chỉnh sửa tập tin cấu hình apache của bạn.

Để làm như vậy, trước tiên bạn cần mở nó bằng lệnh:

vim /etc/httpd/conf/httpd.conf

Sau đó tìm dòng: Tùy chọn Chỉ mục FollowSymLinks

Thay đổi dòng đó thành: Tùy chọn FollowSymLinks

Cuối cùng lưu và thoát tệp và khởi động lại máy chủ apache bằng lệnh này:

sudo service httpd restart

(Bạn có một hướng dẫn với ảnh chụp màn hình ở đây .)


14
Điều này thậm chí hoạt động trong <Directory> hoặc <Location> trong tệp .conf thực tế
chrismarx

1
@chrismarx tập tin .cs nào tôi sẽ đặt nó vào? .htaccess dường như không được kích hoạt trên máy chủ của tôi và tôi đã đọc tốt hơn là không sử dụng nó. Tôi có quyền truy cập vào tất cả các tập tin máy chủ, vì nó là một vps.
Charles John Thompson III

1
Tôi bị mắc kẹt trong cùng một câu hỏi này, tôi đã thêm tệp .htaccess với mã vào cùng thư mục với trang web của tôi nhưng nó vẫn cho tôi một cảnh báo duyệt thư mục. Tôi có làm điều gì sai?
Randy Gilman

10
Lưu ý rằng .htaccesscó thể bằng cách tắt. Vui lòng kiểm tra AllowOverrideChỉ thị. Nếu nó được đặt thành None, thì nó .htaccesssẽ bị tắt. Bạn có thể bật nó bằng cách cài đặt AllowOverride All. Nói chính xác hơn, Allcó nghĩa là tất cả các Chỉ thị của Apache.
Julian

2
Nếu bạn có quyền kiểm soát http.conf, tốt hơn hãy làm điều đó ở đó. Có một màn trình diễn thành công với htaccess
Itay Moav -Malimovka 10/07/18

298

Cách tốt nhất để làm điều này là vô hiệu hóa nó với máy chủ web apache2. Trong Ubuntu 14.X của tôi - /etc/apache2/apache2.confthay đổi mở từ

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

đến

<Directory /var/www/>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

sau đó khởi động lại apache bằng cách:

sudo service apache2 reload

Điều này sẽ vô hiệu hóa danh sách thư mục từ tất cả các thư mục mà apache2 phục vụ.


11
'sudo dịch vụ apache2 tải lại ' sẽ là đủ!
Doctorlai

2
@Jay Tôi cũng đã thử "Tùy chọn-chỉ số" nhưng Apache sẽ không bắt đầu bằng lời nói. Tôi đang chạy phiên bản Máy chủ: Apache / 2.4.18 (Ubuntu). Tuy nhiên, sử dụng "Tùy chọn FollowSymLinks" hoạt động theo câu trả lời của Dung. Tôi chỉ tò mò phiên bản Apache và OS nào bạn đang chạy? Có lẽ đó là một phiên bản?
MikeyE

@Jay @MikeyE Tương tự ở đây; Apache sẽ không tải lại bằng cách sử dụng-Indexes
Crimbo

1
@Jay @MikeyE Apache dường như tải lại / khởi động lại nếu bạn xóaFollowSymLinks
Crimbo

2
Chạy apachectl configtestsau khi thêm Options -Indexes FollowSymLinksvào httpd.conf sẽ phát sinh lỗi sau: "Tất cả các Tùy chọn phải bắt đầu bằng + hoặc - hoặc không có Tùy chọn nào có thể." Do đó, những gì sẽ làm việc làOptions -Indexes +FollowSymLinks
John T.

45

Ngoài hai phương thức đã nói ở trên (chỉnh sửa /etc/apache2/apache2.conf hoặc thêm Tùy chọn-Indexes trong tệp .htaccess), đây là một phương pháp khác

a2dismod autoindex

Khởi động lại máy chủ apache2 sau đó

sudo service apache2 restart

4
Bạn có thể sử dụng a2dismod -f autoindexđể thực thi lệnh không chặn .
Toàn cảnh

Lựa chọn hạt nhân tốt đẹp! Điều này hoạt động cho Aliascác thư mục và bất kỳ đường dẫn nào khác được phục vụ bởi Apache.
kontextify

Tôi có nên nhận thức được bất kỳ tác dụng phụ làm như vậy?
Naresh Kumar

28

Chỉnh sửa / Tạo một .htaccesstập tin bên trong /galeriasvới điều này:

Options -Indexes

Duyệt thư mục được cung cấp bởi mô-đun mod_autoindex .


-Các chỉ số trên thư mục gốc không hoạt động, trong apache2.4.33, tôi đã phải sử dụng câu trả lời của @Sarvar Nishonboyev
Felipe Valdes

1
@FelipeValdes Vui lòng đọc kỹ cả câu hỏi và câu trả lời của tôi. Chúng tôi không nói về thư mục gốc mà là thư mục con và nó được yêu cầu có thể thực hiện được trong một .htaccesstệp (đó không phải là cách hiệu quả nhất nhưng thường là lựa chọn duy nhất trong các tài khoản lưu trữ được chia sẻ hoặc với các sysadins bận rộn).
Álvaro González

23

Bạn có thể đặt một tệp trống được gọi index.htmlvào mỗi thư mục mà bạn không muốn liệt kê. Điều này có một số lợi thế:

  • Nó (thường) yêu cầu cấu hình bằng không trên máy chủ.
  • Nó sẽ tiếp tục hoạt động, ngay cả khi quản trị viên máy chủ quyết định sử dụng "AllowOverride none" trong cấu hình máy chủ. (Nếu bạn sử dụng .htaccesstệp, điều này có thể dẫn đến nhiều thông báo "Lỗi 500 - lỗi máy chủ nội bộ" cho người dùng của bạn!).
  • Nó cũng cho phép bạn di chuyển các tệp của mình từ máy chủ này sang máy chủ khác, một lần nữa mà không phải gặp rắc rối với cấu hình apache.

Về mặt lý thuyết, autoindexing có thể được kích hoạt bởi một tệp khác (điều này được điều khiển bởi DirectoryIndextùy chọn), nhưng tôi chưa gặp phải điều này trong thế giới thực.


Đứng lên! Điều này chỉ có thể hoạt động với Chỉ thị Directory Indexindex.html được xác định chủ yếu .
nyedidikeke

18

Một trong những điều quan trọng là thiết lập một máy chủ web apache an toàn là tắt chức năng duyệt thư mục. Theo mặc định, apache đi kèm với tính năng này được kích hoạt nhưng luôn bị vô hiệu hóa trừ khi bạn thực sự cần nó. Mở tệp httpd.conf trong thư mục apache và tìm dòng trông như sau:

Options Includes Indexes FollowSymLinks MultiViews

sau đó xóa Index Index và lưu tệp. Khởi động lại apache. Đó là nó


1
Hoàn hảo. Vô hiệu hóa nó rộng máy. Tại sao điều này sẽ được bật theo mặc định, tôi không biết ...
eduncan911

1
Điều này làm việc cho tôi trên Ubuntu (apache2.conf) nhưng .htaccess Tùy chọn-Indexes thì không.
Danniel nhỏ

Điều này làm việc cho tôi trên Ubuntu (/etc/apache2/apache2.conf) nhưng .htaccess Tùy chọn-Indexes thì không.
dùng2875289

5

Nếu bạn chọn sửa đổi tệp httpd.conf của mình để giải quyết vấn đề này và bạn có nhiều chỉ thị Tùy chọn, thì bạn phải thêm một - hoặc + trước mỗi chỉ thị. Thí dụ:

Tùy chọn-Indexes + FollowSymLinks


3

Đây không phải là một câu trả lời, chỉ là kinh nghiệm của tôi:

Trên Ubuntu 12.04 apache2 của tôi, không tìm thấy Indexestrong cả apache2.conf hoặc httpd.conf, may mắn thay tôi đã tìm thấy nó trong sites-available/default. Sau khi gỡ bỏ nó, bây giờ nó không thấy danh sách thư mục. Có thể phải làm điều đó cho sites-available/default-ssl.


2

Mở tệp .htaccess của bạn và nhập mã sau vào

Options -Indexes

Đảm bảo bạn nhấn phím ENTER (hoặc phím RETURN nếu bạn sử dụng máy Mac) sau khi nhập các từ "Tùy chọn-Indexes" để tệp kết thúc bằng một dòng trống.


2

Thêm phần này vào tệp .htaccess của bạn:

Options -Indexes

Nếu nó không hoạt động vì bất kỳ lý do nào, hãy thử điều này trong tệp .htaccess của bạn:

IndexIgnore *

1

Để hoàn thành câu trả lời của @ GauravKachhadiya:

IndexIgnore *.jpg

có nghĩa là "chỉ ẩn các tệp mở rộng .jpg khỏi lập chỉ mục.

Chỉ thị IndexIgnore sử dụng biểu thức ký tự đại diện để khớp với các thư mục và tệp.

  • một ký tự sao, nó khớp với bất kỳ ký tự nào trong một chuỗi, ví dụ: foo hoặc foo.extension, trong ví dụ sau, chúng tôi sẽ tắt danh sách thư mục, sẽ không có tệp hoặc thư mục nào xuất hiện trong chỉ mục:

    IndexIgnore *

Hoặc nếu bạn muốn ẩn các tệp không gian, trong danh sách thư mục, thì chúng ta có thể sử dụng

IndexIgnore *.php

* .php => khớp với một chuỗi bắt đầu bằng bất kỳ char nào và kết thúc bằng .php

Ví dụ trên ẩn tất cả các tệp kết thúc bằng .php


0

Hãy thử điều này trong .htaccess:

IndexIgnore *.jpg

Điều này dường như không có bất kỳ ảnh hưởng đối với tôi. Nó phải làm gì đây?
intcreator
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.