Điểm:3

.htaccess - Loại trừ thư mục khỏi bảo vệ xác thực cơ bản

lá cờ id

Tôi có một trang web mà không ai được phép vào nếu không nhập thông tin đăng nhập xác thực cơ bản.

Tuy nhiên, tôi cần mọi người có thể truy cập thư mục phương tiện vì chúng tôi đang sử dụng tiện ích mở rộng của bên thứ ba để tạo tệp PDF và chúng tôi chỉ có thể kiểm tra đầy đủ chúng nếu phương tiện có thể truy cập được.

Thư mục phương tiện nằm ở /var/www/công ty/pub/media.

Lĩnh vực (www.example.com) chỉ tới /var/www/công ty/quán rượu, nên quán rượu thư mục là điểm vào.

Đây là nỗ lực .htaccess của tôi (/var/www/company/.htaccess):

RewriteEngine bật
RewriteCond %{REQUEST_URI} !^/pub/
RewriteCond %{REQUEST_URI} !^/setup/
RewriteCond %{REQUEST_URI} !^/update/
RewriteCond %{REQUEST_URI} !^/dev/
RewriteRule .* /pub/$0 [L]
Directory Index index.php

AuthType cơ bản
AuthName "Được bảo vệ"
AuthUserFile "/var/www/company/.htpasswd"

# Loại trừ thư mục phương tiện khỏi xác thực cơ bản
Phương tiện SetEnvIf Request_URI "^/media/*"

Lệnh cho phép, từ chối
Yêu cầu người dùng hợp lệ
Cho phép từ env=media
Từ chối từ env=!media
đáp ứng bất kỳ

Nhưng nếu tôi cố gắng gọi http://www.example.com/media/someimage.jpg thì tôi vẫn nhận được lời nhắc đăng nhập xác thực cơ bản.

Môi trường:

Apache 2.4.41 (Ubuntu)

Điểm:5
lá cờ in

Đặt tệp .htaccess vào thư mục phương tiện với AuthType Không có.

AuthType Không có
Yêu cầu tất cả cấp
Black avatar
lá cờ id
Làm việc như một sự quyến rũ, thx!
Điểm:1
lá cờ kz
# Loại trừ thư mục phương tiện khỏi xác thực cơ bản
Phương tiện SetEnvIf Request_URI "^/media/*"

Lệnh cho phép, từ chối
Yêu cầu người dùng hợp lệ
Cho phép từ env=media
Từ chối từ env=!media
đáp ứng bất kỳ

Điều này sẽ có hiệu quả, ngoại trừ regex sai trong ĐặtEnvIf chỉ thị, vì vậy env var phương tiện truyền thông không được đặt khi yêu cầu /media/someimage.jpg. Bạn đang thiếu một dấu chấm trước * định lượng, tức là. ^/media/.*. Tuy nhiên, bạn chỉ có thể xóa dấu * hoàn toàn, tức là ^/phương tiện/, có hiệu quả giống nhau (và hiệu quả hơn).

Các Từ chối từ env=!media chỉ thị là thừa.

Vì vậy, những điều sau đây sẽ hoạt động:

# Loại trừ thư mục phương tiện khỏi xác thực cơ bản
Phương tiện SetEnvIf Request_URI "^/media/"

Yêu cầu người dùng hợp lệ
 
Lệnh cho phép, từ chối
Cho phép từ env=media
đáp ứng bất kỳ

TUY NHIÊN, điều này đang sử dụng các chỉ thị Apache 2.2 không dùng nữa. Trên Apache 2.4, thay vào đó, bạn có thể thực hiện các thao tác sau:

# Loại trừ thư mục phương tiện khỏi xác thực cơ bản
Phương tiện SetEnvIf Request_URI "^/media/"

Yêu cầu người dùng hợp lệ
Yêu cầu phương tiện truyền thông env

Các mặc định thùng chứa là <RequireAny> - vì vậy bạn không cần phải bao gồm điều này. Mặc dù bạn có thể rõ ràng nếu bạn muốn:

<RequireAny>
    Require valid-user
    Require env media
</RequireAny>

Ngoài ra, bạn có thể bao quanh toàn bộ khối ủy quyền trong một <If> sự biểu lộ. Ví dụ:

# Mật khẩu bảo vệ mọi thứ trừ thư mục con "/media/"
<Nếu "%{REQUEST_URI} !~ m#^/media/#">
    AuthType cơ bản
    AuthName "Được bảo vệ"
    AuthUserFile "/var/www/company/.htpasswd"
    Yêu cầu người dùng hợp lệ
</Nếu>

người điều hành !~ là một đối sánh biểu thức chính quy phủ định.

Black avatar
lá cờ id
Tốt, tôi đã thử nó và mọi thứ đều hoạt động. Thay vào đó, tôi chấp nhận câu trả lời của bạn vì nó chứa nhiều chi tiết hữu ích hơn và cho biết lý do tại sao nỗ lực của tôi không thành công.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.