Назад | Перейти на главную страницу

Ошибка 403 (доступ запрещен) с обновленным файлом .htaccess

Я использую плагин для одного из своих сайтов, который недавно обновил. Поскольку я обновился, я всегда получаю сообщение об отказе в доступе (ошибка 403) при открытии magnalister.php плагина. Когда я заменяю новый файл .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 2.2 в другом месте вашей конфигурации Apache, и это имеет приоритет.

Только все директивы, которые вы разместили позволять доступ, так что что-то другое в вашей конфигурации запрещает доступ к этому файлу.

Вы обновили свой .htaccess config для работы с модулями mod_authz_core / host Apache 2.4. Однако в Apache 2.4, если другая часть вашей конфигурации все еще использует старую Deny директивы (часть mod_access_compact в Apache 2.4 и mod_authz_host в Apache 2.2), то эти «старые» директивы будут иметь приоритет над «новыми» директивами Apache 2.4 в .htaccess, несмотря на очевидный порядок в вашей конфигурации, и доступ все равно будет запрещен.

Как отмечено в Документы Apache при обновлении до 2.4 с 2.2:

... смешивание старых и новых директив [может] привести к неожиданным результатам. ... Поскольку директивы mod_access_compat имеют приоритет над mod_authz_host ...

Итак, если вы все еще используете «старые» директивы в другом месте вашей конфигурации (чтобы запретить доступ), то их необходимо обновить, чтобы использовать эквивалентные директивы Apache 2.4.

Казалось бы, это подтверждается отображаемой ошибкой, которая вызывается mod_access_compact, а не mod_authz_core, как и следовало ожидать от Apache 2.4.

[Ср, 12 сентября, 00:25:05 2018] [access_compat: ошибка] [pid 7437] [клиент ...] [хост ...] AH01797: клиент отклонен конфигурацией сервера: /is/htdocs/.../www/testshop3/plugins/magnalister/magnalister.php

(В стороне: Вы говорите, что используете Apache 2.4. Вам действительно нужно поддерживать обратную совместимость с Apache 2.2, как вы делаете в .htaccess? Поддерживать обе конфигурации будет сложнее, и они будут более подвержены ошибкам.)