HTTP 401 Unauthorized 錯誤表示服務器需要用戶身份驗證才能訪問資源。當用戶嘗試訪問受保護內容時,如果未通過驗證,就會返回該錯誤信息。本文將總結PHP 中導致401 錯誤的常見原因,並提供對應的解決方法。
如果服務器未設置身份驗證,用戶將無法訪問受保護的資源。
可以使用PHP 的header() 函數設置身份驗證類型:
header('WWW-Authenticate: Basic realm="My Realm"');用戶提供的用戶名或密碼與服務器存儲的信息不匹配,會導致訪問失敗。
檢查用戶提供的憑據是否正確,或者引導用戶重置密碼。
如果用戶沒有權限訪問受保護的文件,也會出現401 錯誤。
確認文件權限設置正確,確保用戶具有適當的訪問權限。
在Apache 服務器中,.htaccess 文件用於配置身份驗證。如果目錄中缺少該文件,服務器無法執行認證。
在受保護目錄中創建.htaccess 文件,並添加身份驗證配置:
AuthType Basic
AuthName "My Realm"
AuthUserFile /path/to/auth-file
Require valid-user服務器配置不當或出現技術問題同樣可能導致HTTP 401 錯誤。
檢查服務器日誌,尋找相關錯誤信息,並根據需要聯繫技術支持。
假設有一個受保護的文件夾private ,其中包含一個受密碼保護的文件secret.txt 。可以使用以下PHP 代碼進行身份驗證:
<!--?php
// 設置基本身份驗證
header('WWW-Authenticate: Basic realm="My Realm"');
// 檢查憑據
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
// 從文件中讀取用戶和密碼
$users = file("users");
$authenticated = false;
foreach ($users as $line) {
list($username, $password) = explode(":", trim($line));
// 將提供的憑據與文件中的憑據進行比較
if ($_SERVER['PHP_AUTH_USER'] == $username && $_SERVER['PHP_AUTH_PW'] == $password) {
$authenticated = true;
break;
}
}
// 如果用戶通過身份驗證,則允許訪問
if ($authenticated) {
fopen("private/secret.txt", "r");
} else {
// 未驗證,返回錯誤
header('HTTP/1.0 401 Unauthorized');
echo 'Authentication failed.';
}
} else {
// 憑據不可用,要求身份驗證
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
}
?-->通過上述配置,可以在PHP 中有效管理受保護資源的訪問,避免HTTP 401 Unauthorized 錯誤影響用戶體驗。