2013-09-27 182 views
32

我正在努力阻止使用.htaccess的文件夾,這是我從未使用過的,而且我遇到了一些麻煩。下面是我有.htaccess/.htpasswd 500內部服務器錯誤

的.htaccess(位於我想要封鎖的文件夾中):

AuthName "Username and password required" 
AuthUserFile /.htpasswd 
Require valid-user 
AuthType Basic 

htpasswd的(位於root,密碼在實際的文件加密):

tim:blah 

我我得到500內部服務器錯誤,我不明白爲什麼。

+2

什麼是'/ .htpasswd',是'/ home/youraccout/public_html'中的一個文件,或者實際上位於文件系統'/'的主目錄下的文件? – Prix

+0

你的apache錯誤日誌說什麼? –

+0

我無法通過我的主機訪問錯誤日誌=(並且我的.htpasswd文件位於我可以訪問的最上面的文件夾中,它不在我的pubic_html文件夾中 –

回答

82

最可能的問題是這一行:

AuthUserFile /.htpasswd 

此行應到密碼文件例如提供完整的文件系統路徑

AuthUserFile /var/www/.htpasswd 

要發現你的文件系統路徑,你可以創建一個包含

echo $_SERVER['DOCUMENT_ROOT'];

+0

.htpasswd位於我可以訪問的最上面的文件夾中 –

+3

也請確保' .htpasswd'不能被羣組和其他人寫入。 – anubhava

+4

找到了主路徑。我的主機種類隱藏了我的重要信息。謝謝。 –

2

權限可能導致此問題也一個PHP文件。

確保.htpasswd可供網絡服務器用戶閱讀。

舉例來說,如果你使用nginx的檢查nginx.conf找出服務器的用戶是什麼,如果你使用Apache,你可以找到它this way

然後設置正確的所有者和讀取權限.htpasswd

5

如果沒有任何幫助,你正在使用PHP你可以把它通過把這個在你的index.php工作(頂部):

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { 
    if ($_SERVER['PHP_AUTH_USER'] != 'user' || 
     $_SERVER['PHP_AUTH_PW'] != 'pass') { 

     header('WWW-Authenticate: Basic realm="Protected area"'); 
     header('HTTP/1.0 401 Unauthorized'); 

     die('Login failed!'); 
    } 
} 
0

我還想補充一點,一些對某些Web主機,如果將該.htpasswd文件放置在可公開訪問的區域,則該文件將不起作用。最近的安裝我確實證實了這一點。正如其他人所指出的,最好將其放置在網站的根目錄中。

+0

「...最好把它放在網站的根目錄下「 - 你的最後一句似乎與你的第一句矛盾(假設你的意思是_document root_)?如你所說,這個文件理想情況下應該在公衆可訪問的區域之外。上面的文件根目錄。 – MrWhite