Symfony Routing:为什么Symfony重定向我的POST请求?

时间:2017-03-16 11:06:00

标签: php apache symfony http

我的Symfony应用程序遇到了一种奇怪的行为。我使用控制器作为facebook的webhook,我期待一个帖子请求。

我的网络服务器的access.log显示以下内容:

[/Mar/2017:11:48:50 +0100] "POST /app_dev.php/bot HTTP/1.1" 301 3810 "-" "-"
[/Mar/2017:11:48:50 +0100] "GET /app_dev.php/bot/ HTTP/1.1" 200 476 "-" "-"

所以我假设我的应用程序确实将POST请求重定向到GET请求。我不知道我应该从哪里开始寻找它?

我的说法看起来像这样:

backend:
    resource: "@BackendBundle/Controller/"
    type:     annotation
    prefix:   /backend

bot:
    resource: "@BotBundle/Controller/"
    type:     annotation
    prefix:   /bot

# redirecting the root
root:
    path: /
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /backend
        permanent: true

我的控制器在BotBundle中:

/**
 * @Route("/")
 * @param Request $request
 * @return Response
 */
public function indexAction(Request $request)
{
  $logger = $this->get('logger');
  $logger->info('REQUEST METHOD: '.$request->getMethod());

只记录GET请求,POST请求永远不会显示,我只在access.log中看到301。

也许它必须用apache做点什么?

是否有人提示如何调试此内容?

提前致谢!

1 个答案:

答案 0 :(得分:1)

在Symfony中,带或不带尾部斜线的路线是相同的路线。但是,为了拥有正确的路线,你将得到一个带有斜线的斜线。

由于您要发布到/app_dev.php/bot,您将被重定向到带有斜杠的/app_dev.php/bot/。这里的问题是HTTP规范说当POST获得重定向时,浏览器应该遵循重定向将动词更改为GET,以避免有关幂等性的问题。