2011-10-05 28 views
36

Vì vậy, tôi muốn giới hạn quyền truy cập vào url. Bây giờ nếu chúng đến từ một địa chỉ IP cụ thể thì chúng sẽ không được nhắc nhập mật khẩu. Nếu họ không đến từ một địa chỉ IP givin thì họ sẽ được nhắc nhập mật khẩu.htaccess - sử dụng mật khẩu HOẶC danh sách trắng ip

do đó, một trong hai hoặc của:

AuthUserFile /some/path/.htpasswd 
AuthName "Please Log In" 
AuthType Basic 
require valid-user 

và:

order deny,allow 

deny from all 
allow from x.x.x.x 

Trả lời

60

Bạn có thể sử dụng các chỉ thị Apache "Satisfy".

Dưới đây là một ví dụ của việc sử dụng nó:

AuthType Basic 
AuthName "Please Log In" 
AuthUserFile /some/path/.htpasswd 
Require valid-user 
Order deny,allow 
Deny from all 
Allow from 127.0.0.1 
Satisfy any 

truy cập mà không cần mật khẩu chỉ được phép từ 127.0.0.1.

Hy vọng điều này sẽ hữu ích.

+0

+1 này là chính xác những gì tôi làm. Hơn nữa, nếu bạn muốn tắt kiểm tra trong một số thư mục (ví dụ: một số công cộng /), chỉ cần đặt trong '.htaccess' của subdir: – pwes

+0

' Cho phép từ tất cả' và 'Thỏa mãn bất kỳ ' – pwes

+0

@Bob: Có hoạt động không? – FbnFgc

4

Với Apache 2.4 Satisfy vẫn có sẵn, nhưng deprecated

Note

Các chỉ thị được cung cấp bởi mod_access_compat đã bị phản đối bởi mod_authz_host. Việc trộn các chỉ thị cũ như Đặt hàng, Cho phép hoặc Từ chối với các chỉ thị mới như Yêu cầu về mặt kỹ thuật có thể nhưng không khuyến khích. Mô-đun này được tạo để hỗ trợ các cấu hình chỉ chứa các chỉ thị cũ để tạo điều kiện nâng cấp 2.4. Vui lòng kiểm tra hướng dẫn nâng cấp để biết thêm thông tin.


Trong trường hợp của bạn Allow from 1.2.3.4 được thay thế bằng Require ip 1.2.3.4

Kết hợp nhiều Require s (như Require valid-userRequire ip) có thể được thực hiện bằng cách Authorization Containers. Vì vậy, nói rằng khách hàng phải cung cấp mật khẩu hoặc đến từ một địa chỉ IP cụ thể, sẽ được thực hiện bằng cách bao quanh các chỉ thị với RequireAny, ví dụ:

<RequireAny> 
    Require valid-user 
    Require ip 1.2.3.4 
</RequireAny> 

Mặc dù, đây là một trường hợp đặc biệt như đã mô tả ở phần cuối của Require

Khi nhiều Yêu cầu chỉ được sử dụng trong một phần cấu hình duy nhất và không được chứa trong một chỉ thị cho phép như <RequireAll>, chúng được chứa ngầm trong chỉ thị <RequireAny>. Do đó, người đầu tiên ủy quyền cho người dùng ủy quyền toàn bộ yêu cầu và chỉ thị Yêu cầu tiếp theo sẽ bị bỏ qua.

Nói cách khác, RequireAny là tùy chọn ở đây, và bạn chỉ có thể liệt kê

Require valid-user 
Require ip 1.2.3.4 
Các vấn đề liên quan