我有一个只能通过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(); }
Order , Allow和Deny系列访问控制指令已被弃用,以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式会降低安全性。