我的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做点什么?
是否有人提示如何调试此内容?
提前致谢!
答案 0 :(得分:1)
在Symfony中,带或不带尾部斜线的路线是相同的路线。但是,为了拥有正确的路线,你将得到一个带有斜线的斜线。
由于您要发布到/app_dev.php/bot
,您将被重定向到带有斜杠的/app_dev.php/bot/
。这里的问题是HTTP规范说当POST获得重定向时,浏览器应该遵循重定向将动词更改为GET,以避免有关幂等性的问题。