【问题标题】:Using RewriteRule in .htaccess for POST request在 .htaccess 中使用 RewriteRule 进行 POST 请求
【发布时间】:2010-01-14 20:38:45
【问题描述】:

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

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

【问题讨论】:

  • 怎么不工作了?具体来说,它是什么都不阻止,还是什么都阻止?

标签: .htaccess mod-rewrite


【解决方案1】:

您需要反转条件以仅匹配不是 POST 的请求:

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

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

【讨论】:

    【解决方案2】:

    我没有资格回答关于.htaccess 的问题,但无论如何我都愿意这样做:

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

    【讨论】:

    • 是的。如果您收到错误消息,您的用户会更开心,也不会感到困惑。
    • 谢谢,同意了。但是还有其他因素支持 RewriteRule 解决方案。另外,现在这是一项任务。
    【解决方案3】:

    我的错。 RewriteRule 上的语法错误。应该是以下。注意 $ 不是 /

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

    【讨论】:

      【解决方案4】:

      &lt;Location&gt;一起使用:

      <Limit GET>
        Deny from all
      </Limit>
      

      【讨论】:

        猜你喜欢
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        • 2020-09-29
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多