2010-01-14 100 views
0

我试图锁定一个页面,只接受POST请求。作为RESTful API的一部分。我有以下,但它似乎并没有工作。任何帮助,将不胜感激。在POST请求的.htaccess中使用RewriteRule

RewriteCond %{REQUEST_METHOD} POST 
RewriteRule ^api/(call1|call2|call3)/?/ http://www.example.com/api/rest_services.php?_call=$1 [L] 
+0

它是如何不工作?具体而言,它是否阻止任何东西或一切? – 2010-01-14 20:42:20

+0

给出404响应 – 2010-01-14 21:36:56

回答

1

我的错。 RewriteRule上的语法错误。应该是以下内容。注意$没有/

RewriteRule ^api/(call1|call2|call3)/?$ http://www.example.com/api/rest_services.php?_call=$1 [L] 
2

我没有资格回答这个问题有关.htaccess,但是这是我宁愿做也无妨方式:

<?php 

if ($_SERVER['REQUEST_METHOD'] !== 'POST') { 
    die('some meaningful REST style error here'); 
} 
+0

是的。如果你有错误信息,你的用户会更快乐,也更少迷惑。 – 2010-01-14 20:49:27

+0

谢谢,并同意。但还有其他因素支持RewriteRule解决方案。另外,现在是一项任务。 – 2010-01-14 21:36:14

8

您需要反转只匹配不在POST请求的条件:

RewriteCond %{REQUEST_METHOD} !=POST 
RewriteRule ^api/(call1|call2|call3)/?/ - [L,R=405] 

然后你也应该送405 status code告诉客户端原因。但R=405标志仅在Apache 2之后才可用。对于Apache 1,您可以将这些请求发送给以该状态码作为响应的PHP脚本。

0

使用此连同<Location>

<Limit GET> 
    Deny from all 
</Limit>