У меня есть один файл, который должен быть доступен только через метод POST.
/var/www/folder/index.php
Корень документа /var/www/
и index.php
вложен в папку.
Версия Apache: 2.4.4.
Мои конфигурации следующие:
<Directory "/var/www/folder">
<Files "index.php">
order deny,allow
Allow from all
<LimitExcept POST>
Deny from all
</LimitExcept>
</Files>
</Directory>
Я захожу на свой сервер в 127.0.0.1/folder
но я могу ПОЛУЧИТЬ и ОТПРАВИТЬ файл, как обычно.
Я также пробовал изменить порядок, order allow,deny
, require, limitexcept и limit.
Как я могу разрешить обработку запросов POST только одним файлом в папке?
Вы можете использовать Require
директива:
<Directory "/var/www/folder">
<Files "index.php">
Require method POST
</Files>
</Directory>
Однако, поскольку это часть раздела авторизации, вы можете попробовать следующее:
<Directory "/var/www/folder">
<Files "index.php">
<LimitExcept POST>
Order allow,deny
Deny from all
</LimitExcept>
</Files>
</Directory>
Если ваши уловки с конфигурацией apache не работают, вы можете сделать это в самом index.php. Вверху файла добавьте что-то вроде этого:
<?php
if($_SERVER['REQUEST_METHOD'] != "POST") {
header("HTTP/1.0 403 Forbidden");
print("Forbidden");
exit();
}
В Order
, Allow
и Deny
семейство директив управления доступом устарело в пользу mod_authz_host.
На самом деле это может быть причиной того, что ваша существующая конфигурация не работает, поскольку любые конфликтующие Require
директивы будут иметь приоритет над вашей конфигурацией (которая все еще поддерживается с помощью mod_access_compat, но эти директивы будут удалены в будущей версии).
Поскольку вы используете семейство 2.4, вам также следует использовать новые директивы стиля. Я протестировал приведенную ниже конфигурацию на 2.4.4, и она работает должным образом:
<Directory "/var/www/folder">
Require all granted
<Files "index.php">
<LimitExcept POST>
Require all denied
</LimitExcept>
</Files>
</Directory>
Замечание Джека о том, что вы можете использовать Require method
Директива также верна и, возможно, более похожа на 2.4.
Условие перезаписи действительно было бы более эффективным, но менее безопасным из-за использования Regex, что иногда может быть сложно.