在.htaccess中使用RewriteRule进行POST请求

时间:2010-01-14 20:38:45

标签: .htaccess mod-rewrite

我试图将页面锁定为仅接受POST请求。作为RESTful API的一部分。我有以下内容,但它似乎不起作用。任何帮助将不胜感激。

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

4 个答案:

答案 0 :(得分:8)

您需要将条件反转为仅匹配非POST的请求:

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

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

答案 1 :(得分:2)

我没有资格回答关于.htaccess的问题,但这是我宁愿这样做的方式:

<?php

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

答案 2 :(得分:1)

我的错误。 RewriteRule上的语法错误。应该如下。请注意 $ 而非 /

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

答案 3 :(得分:0)

<Location>

一起使用
<Limit GET>
  Deny from all
</Limit>