2012-01-04 32 views
6

Trên máy chủ của tôi, tôi có tập tin .htaccess sau:việc "xác thực yêu cầu" khi yêu cầu/thay vì /index.php

DirectoryIndex index.php 

AuthType Basic 
AuthName "Password Required" 
AuthUserFile /var/www/webinterface/.htpasswd 
Options +FollowSymLinks 
Require valid-user 

<Files index.php> 
    Satisfy any 
    Allow from * 
</Files> 

Nếu tôi yêu cầu URL "IP-ADDRESS/index.php", tất cả mọi thứ hoạt động tốt, tôi nhận được index.php hiển thị mà không có một dấu nhắc xác thực. Tuy nhiên ngay sau khi tôi yêu cầu "IP-ADDRESS /" trình duyệt yêu cầu tôi cung cấp thông tin xác thực của tôi.

Tại sao lại xảy ra trường hợp này? Tôi đang thiếu gì?

+0

Wow bạn đã có nghĩa đen chính xác cùng một vấn đề và thiết lập như tôi, những gì một trùng hợp ngẫu nhiên –

Trả lời

7

Thử thay thế khối để sử dụng mod_setenvif để kiểm tra URI yêu cầu thay vì sử dụng <Files>. Mô-đun mod_auth * được ưu tiên hơn mod_dir do đó ánh xạ từ / đến /index.php không xảy ra cho đến sau khi auth diễn ra. Mod_setenvif sẽ xuất hiện trước auth. Hãy thử:

SetEnvIf Request_URI "^/$" allow=yes 
SetEnvIf Request_URI "^/index.php$" allow=yes 

AuthType Basic 
AuthName "Password Required" 
AuthUserFile /var/www/webinterface/.htpasswd 
Options +FollowSymLinks 
Order Deny,Allow 
Satisfy any 
Deny from All 
Require valid-user 
Allow from env=allow 

Nếu URI được yêu cầu là chính xác / hay /index.php, biến allow được thiết lập. Nội dung sau dòng Auth cho biết từ chối mọi thứ trừ người dùng hợp lệ hoặc nếu biến số allow đã được đặt.

+0

wow, tôi vô cùng ấn tượng. Đó là một anser tuyệt vời. Cảm ơn rất nhiều – ftiaronsem

+0

Bạn không phải đặt khối bắt đầu bằng AuthType vào chỉ thị , hoặc vv? –

+0

Bạn có thể giúp tôi hiểu cách làm ngược lại điều này không? Tôi muốn cho phép truy cập vào tất cả các tệp và thư mục con trong một thư mục không có mật khẩu bảo vệ, nhưng tôi muốn yêu cầu xác thực mật khẩu cho/hoặc /index.php. Khi tôi bảo vệ mật khẩu tệp index.php, tôi vẫn có thể truy cập/không có mật khẩu. Tôi nghĩ rằng câu trả lời của bạn ở trên chứa các quy tắc cần thiết cho tôi để đảo ngược ở trên và làm cho nó làm việc cho trường hợp của tôi, nhưng tôi không hiểu SetEnvIf vv cũng đủ để viết nó lên. – WilliamAlexander

Các vấn đề liên quan