Tôi đang bảo vệ các tệp CSV trong thư mục đó. Chúng biến mất khi chỉ thị xác thực đó được đặt. Nó hiển thị khi tôi gỡ bỏ nó. Tôi muốn ít nhất có thể xem các tệp, nhưng khi truy cập các tệp này, nó sẽ đưa ra lời nhắc xác thực.
Khi một danh sách thư mục được tạo bằng cách sử dụng mod_autoindex, một yêu cầu con nội bộ sẽ được đưa ra cho mỗi tệp xuất hiện trong danh sách thư mục. Khi sử dụng một <FilesMatch "^(.*).csv$">
container thì nó cũng đang được xử lý cho các yêu cầu con này và do đó, mục nhập của các tệp này trong danh sách thư mục cũng bị chặn.
Một thay thế cho việc sử dụng <FilesMatch>
chỉ thị là sử dụng một <If>
biểu hiện và kiểm tra chống lại YÊU CẦU
thay vào đó là biến máy chủ. Điều này sau đó chỉ thành công khi mà .csv
các tệp thực sự được người dùng yêu cầu chứ không phải khi duyệt danh sách thư mục.
Ví dụ:
# Danh sách thư mục (mod_autoindex) cần được bật
Tùy chọn + Chỉ mục
# Bảo vệ tệp CSV khỏi bị truy cập nhưng vẫn hiển thị trong danh sách thư mục
<If "%{THE_REQUEST} =~ m#\.csv(\s|\?)#">
AuthName "Dấu nhắc hộp thoại"
AuthType cơ bản
AuthUserFile /xxxxx/kiểm tra
Yêu cầu người dùng hợp lệ
</Nếu>
YÊU CẦU
chứa dòng đầu tiên của yêu cầu HTTP. ví dụ. NHẬN /foo/test.csv HTTP/1.1
(trong trường hợp yêu cầu GET cho /foo/test.csv
) - và không thay đổi trong suốt yêu cầu. Vì vậy, khi yêu cầu chính thư mục, vd. /foo/
thì khối kèm theo không được xử lý và danh sách các tệp này không bị chặn.
Điều phức tạp thêm là YÊU CẦU
chứa toàn bộ URL theo yêu cầu, có thể bao gồm một chuỗi truy vấn. Vì vậy, kiểm tra cho (\s|\?)
(tức là khoảng trắng hoặc một nghĩa đen ?
) là để tránh việc kiểm tra mật khẩu bị bỏ qua bằng cách chỉ bao gồm một chuỗi truy vấn. ví dụ. /foo/test.csv?anything
.