$_SERVER[';REQUEST_METHOD';]返回GET指令POST


$_SERVER['REQUEST_METHOD'] return GET insted POST

我使用post方法创建了一个表单,如下所示:

  <form name="indexFormn" id="indexForm"  method="POST" action="page.php">
  <div class="AdminformDiv">
  <div class="errorbox">
      <?php
      if (!is_array($this->actionErrors)) {
        echo $this->actionErrors;
    }
    ?>
</div>
<div>
    <table border="0" cellpadding="0" cellspacing="0" style="width:700px">
        <tbody>
            <tr>
                <td style="width:128px">Amount</td>
                <td colspan="2">$ <?php echo $this->price;?> USD<td     style="width:270px">&nbsp;</td>
            </tr>
            <tr>
.....

但问题是,当我在php代码中执行"var_dump($_SERVER['REQUEST_METHOD'])"时,我总是得到"get"而不是"POST",我真的不知道为什么?

我刚刚在使用Codeigniter的MVC框架时遇到了这个问题。以下是我的发现:

我表单中的Action属性不包括域前面的"www",但我实际的URL需要"www"。

即,我的表单有action="https://mydomain/something",但如果我转到那个URL,我注意到我的web主机在开头添加了www:https://www.mydomain/something。(我使用DreamHost,这是我选择的设置)

我希望这也是你的问题——试图弄清楚真的很令人沮丧,但一旦我的操作和实际URL在"www"上达成一致,我的请求方法就从GET变成了POST。

基本上大多数HTTP请求都是GET请求。并且$_SERVER['REQUEST_METHOD']评估默认的GET方法。

您可以使用if($_POST)来检查它是否是POST。(这是一个包含POST数据的数组。所有页面都设置了$_GET,所以if($_GET)无法判断它是否是GET)

当您提交表单时,您肯定会在"page.php"上获得POST方法。尝试获取此页面上的方法,但找到了。

根据@Brian Stork的回答,这是因为发生了某种重定向。重定向可能是由于以下原因:

  • HTTPS/HTTP重定向。例如,如果需要,certbot会激活此功能。您可以在.conf文件中更改此项,然后在systemctl restart apache2中更改
  • 拖尾斜线重定向
  • www子域重定向
  • 其他可能的重定向

所以请检查所有这些。如果你正在做一个类似Slack机器人的机器人,向你的应用程序发送请求,请检查他们发送的确切url,以避免重定向。