我正在为最近更新的一个网站使用插件。自从我更新以来,打开插件的 magnalister.php 时总是出现拒绝访问消息(错误 403)。当我用旧文件替换新 .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
?同时维护两个配置只会使维护更加困难并且更容易出错。)