只允许POST方法用于目录中的特定文件

我有一个只能通过POST方法访问的文件。

/var/www/folder/index.php 

文档根目录是/var/www/index.php嵌套在一个文件夹中。

Apache的版本是:2.4.4。
我的configuration如下:

 <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文件夹,但我可以GET和POST文件就像正常。

我也尝试了颠倒顺序, order allow,deny ,要求,限制和限制。

我怎样才能允许一个文件夹中的文件处理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> 

如果你的Apacheconfiguration技巧不起作用,你可以在index.php本身。 在文件的顶部添加一些像thisthis:

 <?php if($_SERVER['REQUEST_METHOD'] != "POST") { header("HTTP/1.0 403 Forbidden"); print("Forbidden"); exit(); } 

OrderAllowDeny系列访问控制指令已被弃用,以mod_authz_host为支持。

这实际上可能是你现有configuration不起作用的原因,因为任何冲突的Require指令将优先于你的configuration(仍然通过mod_access_compat支持,但这些指令将在未来的版本中被删除)。

既然你使用2.4系列,你也应该使用新的样式指令。 我已经在2.4.4上testing了下面的configuration,它按照需要工作:

 <Directory "/var/www/folder"> Require all granted <Files "index.php"> <LimitExcept POST> Require all denied </LimitExcept> </Files> </Directory> 

杰克的观察,你可以使用Require method指令也是正确的,可以说是一个更像2.4这样做的方式。

重写条件确实会更高效,但是由于使用正则expression式会降低安全性。