服务器错误:405 - 不允许使用HTTP动词访问此页面。

36
我有一个 PHP Facebook 应用程序,我已经上传到微软服务器上。当我运行应用程序时,出现了以下错误。有人知道原因吗?
405 - HTTP 动词不允许访问此页面。您正在寻找的页面无法显示,因为尝试访问时使用了无效的方法(HTTP 动词)。

对于那些正在阅读的人,如果“请求的URL”是一个*.json文件,则按照以下说明操作:http://www.uipress.com/add-json-handler-support-in-iis-7/#.UT_bw9aOR8E ...不要单击站点,而是单击服务器节点(在树形结构中)...这样所有站点都会继承该设置。 - Entree
10个回答

65

即使你正在使用IIS或apache,我猜你正在使用静态HTML页面作为着陆页,并且默认情况下Web服务器不允许在.html页面上使用POST或GET谓词,Facebook通过POST/GET谓词调用你的页面。

解决方案是将页面重命名为.php.aspx,然后你就可以顺利进行了 :)


如何配置服务器以允许该页面? - JNF
2
在某些情况下,这并不容易。例如,我正在使用.NET MVC。我的着陆页面是一个cshtml文件,但我不能仅仅更改名称,因为我的控制器调用了该特定的cshtml文件:(在这种情况下我该怎么办? - Moisés Briseño Estrello
控制器应该处理POST事件,您需要像这样做:[HttpPost] public ActionResult Index() {} - Rabih harb
这对我没用。我尝试了 .php,结果相同。当我尝试 .aspx 时,出现了 403 禁止错误。 - glln
1
这个对我有用。文件夹中有一个旧的且未使用的index.html页面,我一直在发布它。我清理了所有不必要的文件(包括index.html),然后它开始工作了(转到Default.aspx)。 - Francis Dean

12

您可以将以下代码添加到web.config文件中:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

2
我在调用API的DELETE动词时遇到了同样的问题。将这些内容添加到我的web.config文件中解决了问题。 - Arham Anees
2
谢谢,我在旧的Windows2012R2上使用PUT时遇到了问题,这个解决方法帮了我大忙。 - Raymond
这对我来说也适用,使用PUT在2012R"的盒子上!感谢@Raymond提到服务器版本。 - John Drinkwater

3
在Facebook应用程序控制面板中,如果您只指定文件夹名称,请确保在指定的URL末尾有一个斜杠。例如:页面选项卡URL:http://mypagetabserver.com/custom_tab/。请注意保留HTML标记。

太棒了,谢谢你的出色回答。 - undefined

1
我通过在我的IIS Webconfig上添加这些行来修复我的问题。
<httpErrors>
    <remove statusCode="405" subStatusCode="-1" />
    <error statusCode="405" prefixLanguageFilePath="" path="/my-page.htm" responseMode="ExecuteURL" />
</httpErrors>

1
这意味着,您尝试在访问某些HTTP内容时使用了错误的http verb。 在Web服务上的许多内容需要使用POST进行使用。 我怀疑您正在尝试使用错误的http动词访问Facebook API。

如何让服务器允许POST动词? - Florian Shena
你的应用程序是直接抛出错误,而不是在调用 web 服务时出错吗?当你注释掉调用 Facebook 的那部分代码后,它还会报错吗?也许你可以给我们展示一些代码? - Tom Squires
实际上,即使我只在 Facebook 应用程序中加载一个 HTML 页面而不尝试加载 FB API,它也会向我显示相同的错误。 - Florian Shena
那么这可能是您的Web服务器配置出了问题(IIS?)。请尝试使用此指南http://www.somacon.com/p126.php,如果仍然无法解决问题,请在Server Fault上发布一个问题。 - Tom Squires

0

尝试重命名默认文件。在我的情况下,最近迁移到IIS7.5时出现了405错误。我将index.aspx更改为default.aspx,立即就可以正常工作。


0
在我的情况下,IIS 没有问题,但是..嗯..除了 web.config 文件之外,文件夹中的所有文件都已被删除(在测试站点上进行手动部署时出现了一半的错误)。

0
我已经为这个问题奋斗了几个小时,但是fakeartist似乎是正确的 - 我将文件扩展名从.htm更改为.php,现在我可以在Facebook上看到我的页面了!如果你把扩展名改成.aspx也可以正常工作 - 也许只需要一个服务器端扩展名(我没有尝试过.jsp)。

0

在我使用jquery时,遇到了这个错误,因为给定的路径中没有找到lib文件。一旦添加回jquery lib,错误就消失了。 [文件名- calculate.html]


-1

我在主机上也遇到了这个错误(我的项目是 .net core2.1 webapi) 请在主机的 web config 中添加以下代码:

<modules>
         <remove name="WebDAVModule" />
</modules>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接