更新 .htaccess 文件后出现错误 403(拒绝访问)

更新 .htaccess 文件后出现错误 403(拒绝访问)

我正在为最近更新的一个网站使用插件。自从我更新以来,打开插件的 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,尽管配置中的顺序看起来是这样的,访问仍将被拒绝。

正如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?同时维护两个配置只会使维护更加困难并且更容易出错。)

相关内容