我有一个文件只能通过 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 请求?
答案1
您可以使用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>
答案2
如果您的 apache 配置技巧不起作用,您可以在 index.php 本身中执行此操作。在文件顶部添加类似以下内容:
<?php
if($_SERVER['REQUEST_METHOD'] != "POST") {
header("HTTP/1.0 403 Forbidden");
print("Forbidden");
exit();
}
答案3
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>
杰克 (Jack) 的观察认为您可以使用该Require method
指令,这也是正确的,并且可以说是一种更像 2.4 的方法。