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