2012-01-04 28 views
6

我的服務器上時,我有以下.htaccess文件:得到「需要驗證」請求/代替的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> 

如果我請求URL「IP地址/ index.php文件」,一切工作正常,我得到的index.php沒有認證提示顯示。但是,一旦我請求「IP地址/」,瀏覽器會要求我提供我的憑據。

爲什麼會出現這種情況?我錯過了什麼?

+0

哇你真的和我完全一樣的問題和設置,什麼是巧合 – 2015-10-29 03:18:04

回答

7

嘗試更換塊以使用mod_setenvif檢查請求URI而不是使用<Files>。 mod_auth *模塊優先於mod_dir,因此在驗證發生之前,//index.php之間的映射不會發生。 Mod_setenvif將發生在驗證之前。嘗試:

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 

如果請求的URI正是//index.php,變量allow被設定。如果設置了變量allow,Auth行後面的內容表示拒絕除有效用戶以外的所有內容。

+0

哇,我深深的印象。這是一個偉大的激情。非常感謝 – ftiaronsem 2012-01-04 19:12:02

+0

您是否需要將以AuthType開頭的塊放入,等指令? – 2015-10-27 01:47:12

+0

你能幫助我理解如何做到與此相反嗎?我想允許訪問目錄中的所有文件和子目錄,但沒有密碼保護,但我確實需要/或/index.php的密碼認證。當我用密碼保護index.php文件時,我仍然可以訪問/沒有密碼。我認爲你上面的答案包含了我需要的規則來扭轉上述情況,並使其適用於我的情況,但我不太瞭解SetEnvIf等,以便將其寫出來。 – WilliamAlexander 2017-10-16 16:38:40