我在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
可接受的动词被控制在web.config中(在网站的根目录中的)中<system.web><httpHandlers>,并可能<webServices><protocols>。如果存在Web.config,将可对其进行访问。还有一个全局server.config可能不会。如果您可以查看其中任何一个,则可能会得到一些提示。
可接受的动词随内容类型的不同而有所不同-您是否在页面中设置了Content-type标头?(即,如果您的内容类型为application / json,则允许使用不同的动词)