Xác thực Apache: cho phép truy cập công khai vào thư mục con


13

Đây có lẽ là một vấn đề đơn giản, nhưng tôi không thể tìm thấy giải pháp trong tài liệu.

Tôi muốn mật khẩu bảo vệ trang web của mình bằng xác thực BASIC. Nhưng tôi muốn một thư mục con không được bảo vệ:

http://mysite.com/ -> BASIC protected
http://mysite.com/somedir -> BASIC protected
http://mysite.com/someotherdir -> BASIC protected
http://mysite.com/public -> not protected

Tôi không có vấn đề gì trong việc bảo vệ tất cả các trang web, nhưng tôi không biết làm thế nào tôi có thể "bỏ bảo vệ" một thư mục. Trang web được lưu trữ trên một máy chủ được chia sẻ, vì vậy tôi chỉ có quyền truy cập vào các tệp .htaccess để thực hiện cấu hình.

Có một chỉ thị để phủ nhận xác thực?

Cảm ơn đã giúp đỡ ...


Đây có vẻ là giải pháp chính xác nhất: stackoverflow.com/questions/2641646/
Kẻ

Câu trả lời:


10

Không nên là một vấn đề với .htaccess, tùy thuộc vào những gì chủ nhà đã cho phép.

Bạn có thể thử đặt một .htaccess vào thư mục con với các mục sau, mặc dù phần ghi đè sẽ phải được bật cho các thư mục chứa trong đó.

 Allow From All
 Satisfy Any

1
Nước sốt bí mật ở đây, IIRC, là đặt .htaccess vào thư mục gốc của trang web của bạn, nhưng có một mục trong tệp .htaccess đó giống như một bài nói về hình trụ.
Paul Lathrop

Và đừng quên thêm (hoặc đảm bảo có tồn tại) một AllowOverride để .htaccess sẽ được sử dụng.
TCampbell

1
@Paul - Tôi đã xóa câu trả lời của mình, nhưng câu trả lời của AFAICR hiện đang sai? Tệp .htaccess trong thư mục con không thể ghi đè lên cao hơn. Tuy nhiên, tệp .htaccess trong thư mục mẹ cũng có thể bao gồm các điều khiển (hoặc thực sự loại bỏ chúng) cho các thư mục con.
Alnitak

Tôi đã thử cả việc đặt một lệnh <Directory /> trong thư mục gốc và trong thư mục tôi muốn công khai, nhưng trong cả hai trường hợp tôi đều nhận được HTTP 500. Bạn có ý tưởng nào khác không?
Guillaume

1
Bạn không thể sử dụng <Directory> trong .htaccess, mặc dù bạn có thể sử dụng <Tệp> và <Vị trí>
Alnitak

7

OK, đối với máy chủ đường dẫn.com / private / public:

server.com/private/.htaccess

AuthType Basic
AuthName "Private, keep out."
Require...

server.com/private/public/.htaccess

Allow From All
Satisfy Any

Chìa khóa ở đây là 'Thỏa mãn bất kỳ' nào HOẶC yêu cầu từ thượng nguồn cùng nhau. "Thỏa mãn tất cả" là mặc định.


Thx đã giải thích 'Thỏa mãn bất kỳ'
Mario

1

Tôi tin rằng điều này có thể làm điều đó:

# put the global auth stuff here
...

# put the override here
<Location /public>
Allow from All
Satisfy Any
</Location>

Không bao giờ nên sử dụng <Location> s để kiểm soát truy cập. Nó chỉ kiểm soát truy cập thông qua một tên, chứ không phải là chính tài nguyên. Do đó, bất cứ điều gì cung cấp quyền truy cập vào nó thông qua một tên khác (ví dụ Bí danh) đều không có quyền kiểm soát truy cập được áp dụng cho nó.
CK.

1
@CK Trên thực tế, bạn phải sử dụng Vị trí nếu vị trí được đề cập không phải là thư mục vật lý mà chỉ là thư mục "ảo" được ngụy trang bởi một cái gì đó như mod_rewrite.
Natalie Adams

0

Tôi quản lý để giải quyết điều này làm điều này:

<Directory "/path/to/maindirectory">
[... auth stuff ... ]
</Directory>

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
</Directory>

KHÔNG sử dụng Vị trí, vì chúng được phân biệt chữ hoa chữ thường và chúng không hoạt động khi truy cập thư mục thực tế mà chỉ qua URL.

Vì vậy, ví dụ, nếu tôi viết

http:/mywebsite/STUFF

hoặc là

http://mywebsite/stuff

hoặc là

http://mywebsite/StUfF

Điều này khác với điều khiển Vị trí, ngay cả khi thư mục vật lý được gọi là giống nhau !!!

Nói tóm lại, bạn kiểm tra quyền truy cập vào "nội dung" thư mục và tôi có thể viết nó với các trường hợp khác nhau.

Ngoài ra, sử dụng tệp .htaccess trong thư mục đơn có điều khiển vị trí trên những người khác không hoạt động với tôi.

Hy vọng nó giúp.

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.