方法不允许 (405) 即使在 NGINX 上发布到 php 文件时也是如此

Posted

技术标签:

【中文标题】方法不允许 (405) 即使在 NGINX 上发布到 php 文件时也是如此【英文标题】:Method Not Allowed (405) even when posting to a php file on NGINX 【发布时间】:2012-01-15 11:30:27 【问题描述】:

我一直在谷歌搜索,我只能发现当您发布到 html 文件时可能会发生此错误。在我的设置中,我有一个重写规则,它基本上从 url 中隐藏了 index.php 文件,我很长一段时间都认为它与此有关。 Get 工作正常,但由于某种原因 Get 不适用于 OpenID。

方法不允许

URL /post.php 不允许 POST 请求

这是我的设置:

Debian squeeze / AMD64

nginx version: nginx/1.1.8

PHP 5.3.3-7+squeeze3 with Suhosin-Patch (cli) (built: Jun 28 2011 08:24:40) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH

【问题讨论】:

【参考方案1】:

我遇到了同样的错误。

我的问题是 POST 函数不接受第二个参数

function someForm($f3, $args)
    //some Process

【讨论】:

【参考方案2】:

我自己解决了这个问题!

我安装了 lighttpd,但在使用 lighttpd 时又遇到了同样的错误。 我查看了所有错误的地方,因为错误 405 是网络服务器错误。

然而,我刚开始使用一个名为 fatfree F3 的新 php 框架,当你像这样使用 GET 时,这个框架会产生错误:

F3::route('GET /autho/idreply', 'auth.php');

GET 意味着框架只需要 GET 变量并且会拒绝 POST 变量。

出现服务器错误 405,即!

所以将其更改为,以下是诀窍:

F3::route('POST /auth/oidreply', 'auth.php');  

你甚至可以让框架接受这两个命令或其中一个;

F3::route('GET|POST /auth/oidreply', 'auth.php');  

【讨论】:

以上是关于方法不允许 (405) 即使在 NGINX 上发布到 php 文件时也是如此的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 AJAX - 即使我发送 POST 请求,也不允许返回 405 GET 方法

WCF REST 服务返回 405:jQuery AJAX GET 不允许的方法

jQuery .ajax() 405(不允许的方法)/跨域

加载资源失败:服务器响应状态为 405(不允许)需要有关 nginx.conf 的帮助

“无法在已发布的 Web API 上发布数据” – 405(不允许的方法)

Jquery Ajax 对 Nginx 中的静态 html 资源的请求导致“405 不允许”