更新的 .htaccess 檔案出現錯誤 403(存取被拒絕)

更新的 .htaccess 檔案出現錯誤 403(存取被拒絕)

我正在為我最近更新的網站之一使用插件。自從我更新後,打開插件的 Magnalister.php 時,我總是收到訪問被拒絕的訊息(錯誤 403)。當我用舊的 .htaccess 檔案替換新的 .htaccess 檔案時,沒有任何問題。以下是文件的內容:

更新前:

<Files magnalister.php>
    Order Deny,Allow
    Allow from all
</Files>

<Files magnaCallback.php>
    Order Deny,Allow
    Allow from all
</Files>

更新後:

<Files magnalister.php>
    <IfModule !mod_authz_core.c>
        Order Deny,Allow
        Allow from all
    </IfModule>
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
</Files>
<Files magnaCallback.php>
    <IfModule !mod_authz_core.c>
        Order Deny,Allow
        Allow from all
    </IfModule>
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
</Files>

在 PHP 錯誤日誌中我得到以下資訊:

[Wed Sep 12 00:25:05 2018] [access_compat:error] [pid 7437] [client ***] [host ***] AH01797: client denied by server configuration: /is/htdocs/***/www/testshop3/plugins/magnalister/magnalister.php

我使用 Apache/2.4.10。

更新版本出現403錯誤是什麼原因?

答案1

你在哪否認使用權?這似乎就是問題所在。我懷疑您仍然在 Apache 配置中的其他位置拒絕使用“舊”Apache 2.2 指令進行訪問,並且這是優先的。

僅您發布的所有指令允許訪問,所以別的東西您的設定中拒絕存取該檔案。

您已更新.htaccess設定以使用 Apache 2.4 的 mod_authz_core/host 模組。但是,在 Apache 2.4 上,如果設定的另一部分仍在使用舊Deny指令(Apache 2.4 中的 mod_access_compact 和 Apache 2.2 中的 mod_authz_host 的一部分),那麼這些「舊」指令將優先於 中的「新」Apache 2.4 指令.htaccess,儘管您的配置中有明顯的順序,但訪問仍然會被拒絕。

如中所述Apache 文件正在從 2.2 升級到 2.4

....混合新舊指令[可能]導致意想不到的結果。 ……因為 mod_access_compat 指令優先於 mod_authz_host ...

因此,如果您仍在設定中的其他位置使用「舊」指令(以拒絕存取),則需要更新這些指令以使用等效的 Apache 2.4 指令。

您看到的錯誤似乎證實了這一點,該錯誤是由 mod_access_compact 觸發的,而不是 mod_authz_core 觸發的,正如您在 Apache 2.4 上所期望的那樣。

[2018 年 9 月 12 日星期三 00:25:05] [訪問相容:錯誤] [pid 7437] [客戶端...] [主機...] AH01797:客戶端被伺服器設定拒絕:/is/htdocs/.../www/testshop3/plugins/magnalister/magnalister.php

在旁邊:你說你正在使用 Apache 2.4。您真的需要像您在 中所做的那樣保持與 Apache 2.2 的向後相容性嗎.htaccess?維護這兩個配置只會變得更難維護並且更容易出錯。

相關內容