为什么我的PUT HTTP请求转换为GET

时间:2016-02-04 16:36:07

标签: php apache symfony http

我们创建了基于PHP的插件,该插件提供了我们正在处理的移动应用程序使用的RESTful接口。该插件是自托管的,这意味着任何想要使用移动应用程序的人都必须在他们的服务器上安装这个PHP插件。我们的一位用户报告说,安装插件后他们无法登录。使用Postman来练习登录请求中涉及的API,我想出了以下内容:

请求

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
    <title>501 Method Not Implemented</title>
</head>
<body>
    <h1>Method Not Implemented</h1>
    <p>GET to /chat/index.php/wurrd/clientinterface/operator/login not supported.
        <br />
    </p>
    <p>Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body>
</html>

RESPONSE

wurrd_client_operator_login:
    # The login request details are passed in as a JSON payload.
    path: /wurrd/clientinterface/operator/login
    defaults:
        _controller: Wurrd\Mibew\Plugin\ClientInterface\Controller\OperatorController::loginAction
    methods: [PUT]

API不会为GET公开该路由,因此在尝试通过GET到达时,错误消息是合适的。但问题是,请求是使用PUT进行的。

我对如何调查这个问题感到很茫然。服务器正在运行Apache。这可能是.htaccess的问题吗?我认为可能是mod_rewrite问题,但我想这应该处理URL而不是HTTP方法。

此外,使用Symfony2路由组件完成路由。

任何帮助将不胜感激。

感谢。

更新1:

这是Symfony路线的配置:

{{1}}

2 个答案:

答案 0 :(得分:0)

尝试在URL中添加_method参数以强制执行该方法。

更多信息: http://symfony.com/doc/current/cookbook/routing/method_parameters.html

答案 1 :(得分:0)

如果有一个未被注意的303重定向正在进行(如果您的客户端没有正确实现HTTP,也可能是301/302),或者如果代理/中间人正在转换请求之前,也可能发生这种情况它到达服务器。

要使用_method,请确保没有任何内容禁用支持: http://symfony.com/doc/current/reference/configuration/framework.html#http-method-override