%20%D0%BF%D1%80%D0%B8%20%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20.htaccess.png)
Я использую плагин для одного из моих сайтов, который я недавно обновил. С тех пор, как я обновился, я всегда получаю сообщение об отказе в доступе (Ошибка 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 в обновленной версии?
решение1
Где тыотрицаядоступ? Похоже, проблема в этом. Я подозреваю, что вы все еще запрещаете доступ с помощью "старых" директив Apache 2.2 в другом месте конфигурации Apache, и это имеет приоритет.
Все директивы, которые вы разместили, толькопозволятьдоступ, поэтомучто-то другоев вашей конфигурации запрещен доступ к этому файлу.
Вы обновили свою .htaccess
конфигурацию для работы с модулями 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.2 до 2.4:
...смешивание старых и новых директив [может] привести к неожиданным результатам. ... Поскольку директивы 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
? Поддерживать обе конфигурации будет только сложнее и более подвержено ошибкам.)