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

时间:2009-09-09 14:50:15

标签: 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>

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

11 个答案:

答案 0 :(得分:25)

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

表单发布后,我对用户进行身份验证,然后重定向到应用程序的主要部分。

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

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

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

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

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:4)

你有没有试过POST vs post?此支持文章表明它可能会导致IIS出现问题:http://support.microsoft.com/?id=828726

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

我不知道为什么,但是当您通过POST方法将页面内的表单提交给自己时,就会发生这种情况。

所以将method="post"更改为method="get"或从action="anyThings.any"标记中删除<form>

答案 5 :(得分:0)

听起来服务器在处理POST请求时遇到问题(get和post是动词)。我不知道,有人会如何或为何将服务器配置为忽略发布请求,但唯一的解决方案是修复服务器,或更改应用程序以使用获取请求。

答案 6 :(得分:0)

我在Facebook应用程序中遇到此问题,我正在为粉丝页面选项卡开发。如果有人在facebook应用程序中遇到此问题,那么

1-goto https://developers.facebook.com

2 - 选择您正在开发的应用程序

3 - 确保您应用程序的所有链接都有拖尾斜线 /

我的问题出在https://developers.facebook.com-&gt;应用 - &gt; MYAPPNAME-&gt;设置 - &gt;页面标签 - &gt;安全页面标签网址,页面标签编辑网址,页面标签网址 希望这会有所帮助

答案 7 :(得分:0)

正如drewm自己所说,这是由于后来重定向POST后脚本实际上已经成功了。 (我可能已将此作为评论添加到他的答案中,但你需要50个评论的声誉,我在这里新一轮 - 愚蠢的规则恕我直言)

但如果您尝试重定向到某个页面而不仅仅是目录,它也适用 - 至少它是为我做的。我试图重定向到/thankyou.html。解决这个问题的方法是使用绝对网址,即http://example.com/thankyou.html

答案 8 :(得分:0)

我不得不将我的表格的POST更改为GET。我只是在一个测试天蓝色网站上的html页面上做了一个演示文章。阅读此信息以获取信息:http://support.microsoft.com/kb/942051

答案 9 :(得分:0)

我们只是遇到了同样的问题。我们的Cpanel已从仅PHP扩展到PHP和.NET,并默认为.NET。

登录到Cpanel,并确保您没有遇到相同的问题。

答案 10 :(得分:-4)

另一个可能的原因。

我的HTML页面有这些起始标记:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

这是在使用光滑的jquery幻灯片显示的页面上。

我删除了代码并替换为:

<html>

一切都恢复了。