在IIS上将表单发布到PHP时,导致HTTP 405"无效方法(HTTP动词)"错误的原因是什么?

dre*_*ewm 33 php iis iis-6

我在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>
Run Code Online (Sandbox Code Playgroud)

什么可以导致IIS仅在一个表单上抛出该错误,但在其他表单上工作正常?

dre*_*ewm 26

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

表单POST后,我验证用户身份,然后重定向到应用程序的主要部分.

Util::redirect('/apps/content');
Run Code Online (Sandbox Code Playgroud)

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

错误消息从未表明它是生成错误的以下页面 - 感谢Microsoft!

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

Util::redirect('/apps/content/');
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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


小智 5

您有没有尝试过POST与Post?该支持文章建议它可能导致IIS问题:http : //support.microsoft.com/? id= 828726

  • @madicemickael,“ POST”是* HTTP *动词,而不是* HTML *。这些是不同的东西。如果要说“ HTTP不区分大小写”,那也不是正确的,因为HTTP通常使用字节而不是文本进行操作。“大小写”的概念仅适用于文本。 (3认同)
  • 现在链接失效了。最好复制并粘贴答案的一些主要部分,这样如果将来链接断开,我们就可以知道它是关于什么的。谢谢。 (2认同)

And*_*iih 5

可接受的动词被控制在web.config中(在网站的根目录中的)中<system.web><httpHandlers>,并可能<webServices><protocols>。如果存在Web.config,将可对其进行访问。还有一个全局server.config可能不会。如果您可以查看其中任何一个,则可能会得到一些提示。

可接受的动词随内容类型的不同而有所不同-您是否在页面中设置了Content-type标头?(即,如果您的内容类型为application / json,则允许使用不同的动词)