在 IIS 上将表单 POST 到 PHP 时,什么会导致 HTTP 405“无效方法(HTTP 谓词)”错误?

2022-08-30 13:41:35

我在PHP(5.2.9-1)应用程序中有一个表单,导致IIS(Microsoft-IIS / 6.0)在POST时抛出以下错误:

无法显示您要查找的页面,因为尝试访问时使用了无效的方法(HTTP 谓词)。

这是一个 HTTP 405 状态代码。应用程序中的所有其他表单都有效,因此我相信PHP页面的IIS“动词”设置是正确的。

这是客户的服务器,我无权访问它来验证设置或测试代码。我所能做的就是发送客户更换文件。IIS 服务器上的其他客户没有此类问题。

表单非常简单:

<form method="post" action="index.php">
    ... fields ... 
</form>

什么原因可能导致 IIS 仅在一个窗体上引发该错误,但在其他窗体上工作正常?


答案 1

我设法让FTP访问客户的服务器,因此能够追踪到问题。

在表单被 POSTTed 后,我对用户进行身份验证,然后重定向到应用的主要部分。

Util::redirect('/apps/content');

错误不是在表单的发布上发生的,而是在紧随其后的重定向上发生的。由于某种原因,IIS 继续假定 POST 方法用于重定向,然后反对 POST to,因为它是一个目录。/apps/content

错误消息从未指示是以下页面生成错误 - 谢谢微软!

解决方案是添加一个尾部斜杠:

Util::redirect('/apps/content/');

然后,IIS 可以将重定向到默认文档解析为不再尝试 POST 到目录。


答案 2

我正在将VB6 IIS应用程序部署到具有75个文件夹的远程专用服务器。我收到此错误的原因是默认文档未在其中一个文件夹上设置,这是一个疏忽,因此命中该文件夹的URL不知道要服务器哪个页面,因此抛出了此线程中提到的错误。


推荐