當前位置: 首頁> 最新文章列表> PHP HTTP 401 Unauthorized 錯誤原因及解決方案詳解

PHP HTTP 401 Unauthorized 錯誤原因及解決方案詳解

M66 2025-11-02

PHP HTTP 401 Unauthorized 錯誤概述

HTTP 401 Unauthorized 錯誤表示服務器需要用戶身份驗證才能訪問資源。當用戶嘗試訪問受保護內容時,如果未通過驗證,就會返回該錯誤信息。本文將總結PHP 中導致401 錯誤的常見原因,並提供對應的解決方法。

未設置身份驗證

如果服務器未設置身份驗證,用戶將無法訪問受保護的資源。

解決方法

可以使用PHP 的header() 函數設置身份驗證類型:

 header('WWW-Authenticate: Basic realm="My Realm"');

無效憑據

用戶提供的用戶名或密碼與服務器存儲的信息不匹配,會導致訪問失敗。

解決方法

檢查用戶提供的憑據是否正確,或者引導用戶重置密碼。

受保護的文件不可訪問

如果用戶沒有權限訪問受保護的文件,也會出現401 錯誤。

解決方法

確認文件權限設置正確,確保用戶具有適當的訪問權限。

缺少.htaccess 文件

在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 錯誤影響用戶體驗。