代码之家  ›  专栏  ›  技术社区  ›  drewm

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

  •  32
  • drewm  · 技术社区  · 16 年前

    我在一个php(5.2.9-1)应用程序中有一个表单,它使IIS(Microsoft IIS/6.0)在发布时抛出以下错误:

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

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

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

    形式非常简单:

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

    什么会导致IIS只在一个表单上抛出该错误,而在其他表单上运行良好?

    11 回复  |  直到 6 年前
        1
  •  25
  •   drewm    16 年前

    我设法获得了客户服务器的ftp访问权,因此能够跟踪问题。

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

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

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

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

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

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

    然后,由于不再尝试发布到目录,因此IIS可以解决重定向到默认文档的问题。

        2
  •  7
  •   User1000547 shiyani suresh    8 年前

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

        3
  •  4
  •   David Carrington    16 年前

    你有没有试过邮寄和邮寄?此支持文章建议它可能会导致IIS出现问题: http://support.microsoft.com/?id=828726

        4
  •  4
  •   Andiih    16 年前

    可接受的动词控制在web.config中(在网站的根目录中找到)。 <system.web><httpHandlers> 而且可能 <webServices><protocols> . 如果web.config存在,您将可以访问它。还有一个global server.config可能不会。如果你能看到其中的任何一个,你可能会得到一个线索。

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

        5
  •  2
  •   Mark Ursino    13 年前

    我不知道为什么,但是当你在一个页面内提交一个表单给它自己 POST 方法。

    所以改变 method="post" method="get" 或移除 action="anyThings.any" 从你 <form> 标签。

        6
  •  0
  •   mik    16 年前

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

        7
  •  0
  •   Waqleh    11 年前

    我在为粉丝页标签开发的Facebook应用程序中遇到了这个问题。如果有人使用Facebook应用程序面临这个问题,那么

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

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

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

    我的问题是 https://developers.facebook.com- >应用程序->myAppName->设置->页选项卡->安全页选项卡URL,页选项卡编辑URL,页选项卡URL 希望这会有帮助

        8
  •  0
  •   Doug McLean    11 年前

    正如drewm自己所说的,这是由于随后的重定向导致了该脚本的发布实际上已经成功。(我可能在他的回答中添加了这个评论,但你需要50个声誉来评论,我是新一轮的-愚蠢的规则imho)

    但如果你试图重定向到一个页面,而不仅仅是一个目录,这同样适用——至少对我来说是这样。我试图重定向到/thankyou.html。解决这个问题的方法是使用绝对URL,即 http://example.com/thankyou.html

        9
  •  0
  •   captainhero70    10 年前

    我不得不把我的表格改成GET。我只是在一个测试Azure站点上做一个HTML页面的演示文章。阅读此信息: http://support.microsoft.com/kb/942051

        10
  •  0
  •   Sam Monem    7 年前

    我们刚刚碰到了同样的问题。我们的cpanel已经从php扩展到php和.net,并默认为.net。

    登录到您的CPanel,确保您没有同样的问题。

        11
  •  -4
  •   John M    10 年前

    另一个可能的原因。

    我的HTML页面有以下开始标记:

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

    这是一个使用光滑jquery幻灯片的页面。

    我取下标签,换成:

    <html>
    

    一切又开始了。

    推荐文章