【问题标题】:Why is $_SERVER['REQUEST_METHOD'] always GET?为什么 $_SERVER['REQUEST_METHOD'] 总是 GET?
【发布时间】:2014-12-17 19:51:05
【问题描述】:

我对此有点困惑。我希望这是我错过的非常明显的事情!我有一个非常简单的表格:

<form class="form-signin" role="form" name="login" method="POST" action="/page">
  <input type="password" name="password" />
  <input type="submit" value="Sign in" />
</form>

注意:此页面位于/page,并在以下 HTML 之后回显:

/page 我在文件的最顶部有这个:

<?php
var_dump($_SERVER['REQUEST_METHOD']);

由于某种原因,当我提交此表单时,它总是显示为GET。如果我去掉action="/page" 部分,那么它会显示为POST。我在这里错过了什么?

注意:即使我加载页面,然后在上述var_dump() 调用后退出,它仍然显示GET

在检查员的时间线中,我看到了这个请求:

【问题讨论】:

  • 什么是action="/page"?看起来不像是文件路径,怎么路由的?
  • 我正要说。看起来它在 processing 发布请求之后正在重定向。我们能看到index.php吗?
  • 当您将 action="/page" 更改为 action="/page/" 时,它对我有用
  • 打开 Firebug 或其他任何一个,并告诉我们 referrer 以获取神秘的 GET 请求。
  • 您能否详细说明服务器设置?阿帕奇,nginx?当前配置。有代理吗?

标签: php forms


【解决方案1】:

感谢 cmets 对我的问题的解答,我在 apache 配置中找到了答案。看来,因为index.php 文件位于名为page 的文件夹中,apache 将自动重定向到带有斜杠的页面。这是 Apache directorySlash documentation 中看到的默认设置。

当他们警告不要关闭此功能时,我会将网址更改为我发布的内容。或者,当然,我可以添加一个带有正确重写规则设置的.htaccess 文件。\

感谢大家的帮助!附带说明一下,在这种情况下,Safari 的检查员让我有点欠缺。事实证明,Chrome 是一个更好的测试选择。

【讨论】:

  • Dist 之前的答案是正确答案,即使您使用了相同解决方案的变体。
  • 其实不是。它说它必须使用 /index.php 但事实并非如此。此外,它没有回答为什么会发生这种情况,只是一种解决方法。
  • 它也发生在 nginx 中。除非提供了尾部斜杠,否则似乎将请求作为 GET 发送到 PHP。很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
相关资源
最近更新 更多