
我正在為我最近更新的網站之一使用插件。自從我更新後,打開插件的 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
,儘管您的配置中有明顯的順序,但訪問仍然會被拒絕。
....混合新舊指令[可能]導致意想不到的結果。 ……因為 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
?維護這兩個配置只會變得更難維護並且更容易出錯。