我为我最近更新的一个网站使用了一个插件。由于我已更新,因此在打开插件的 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错误是什么原因?
你在哪里拒绝访问?这似乎是问题所在。我怀疑您仍然拒绝使用 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
,尽管您的配置中有明显的顺序,但访问仍将被拒绝。正如在从 2.2 升级到 2.4 的 Apache 文档中所述:
因此,如果您仍在配置中的其他地方使用“旧”指令(拒绝访问),则需要更新这些指令以使用等效的 Apache 2.4 指令。
您看到的错误似乎证实了这一点,该错误由 mod_access_compact 触发,而不是 mod_authz_core,正如您在 Apache 2.4 上所期望的那样。
(旁白:你说你使用的是 Apache 2.4。你真的需要像你在做的那样保持与 Apache 2.2 的向后兼容性
.htaccess
吗?维护这两个配置只会更难维护,更容易出错。)