Php Symfony2:找不到产品404=200?

Php Symfony2:找不到产品404=200?,php,symfony,Php,Symfony,在prod环境中,当请求不存在的URI(例如,…/green)时,我希望能够呈现自定义404错误页面。响应头是 Date: Sat, 16 Nov 2013 19:11:55 GMT Server: Apache/2.4.4 (Win32) PHP/5.4.8 X-Powered-By: PHP/5.4.16 Content-Length: 2455 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/

在prod环境中,当请求不存在的URI(例如,…/green)时,我希望能够呈现自定义404错误页面。响应头是

Date: Sat, 16 Nov 2013 19:11:55 GMT
Server: Apache/2.4.4 (Win32) PHP/5.4.8
X-Powered-By: PHP/5.4.16
Content-Length: 2455
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

200 OK
答案是

Fatal error: Uncaught exception 'Symfony\Component\Routing\Exception\ResourceNotFoundException' in G:\Documents\workspace\sym\app\cache\prod\classes.php on line 1883 Symfony\Component\Routing\Exception\ResourceNotFoundException: in G:\Documents\workspace\sym\app\cache\prod\appProdUrlMatcher.php on line 1682 Call Stack: 0.0000 130880 1. {main}() G:\Documents\workspace\sym\web\app.php:0 0.0200 340984 2. Symfony\Component\HttpKernel\Kernel->handle() G:\Documents\workspace\sym\web\app.php:21 0.1800 2659792 3. Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle() G:\Documents\workspace\sym\app\bootstrap.php.cache:2249 0.1800 2661000 4. Symfony\Component\HttpKernel\HttpKernel->handle() G:\Documents\workspace\sym\app\bootstrap.php.cache:2947 0.1800 2661032 5. Symfony\Component\HttpKernel\HttpKernel->handleRaw() G:\Documents\workspace\sym\app\bootstrap.php.cache:2818 0.1800 2661576 6. Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() G:\Documents\workspace\sym\app\bootstrap.php.cache:2833 0.4900 4232624 7. Symfony\Component\EventDispatcher\EventDispatcher->dispatch() G:\Documents\workspace\sym\app\cache\prod\classes.php:1764 0.4900 4233384 8. Symfony\Component\EventDispatcher\EventDispatcher->doDispatch() G:\Documents\workspace\sym\app\cache\prod\classes.php:1600 0.4900 4234080 9. call_user_func() G:\Documents\workspace\sym\app\cache\prod\classes.php:1667 0.4900 4234096 10. Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest() G:\Documents\workspace\sym\app\cache\prod\classes.php:1667 0.4900 4234360 11. Symfony\Component\Routing\Router->match() G:\Documents\workspace\sym\app\cache\prod\classes.php:1872 0.4900 4238400 12. appProdUrlMatcher->match() G:\Documents\workspace\sym\app\cache\prod\classes.php:1207 Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /green" in G:\Documents\workspace\sym\app\cache\prod\classes.php on line 1883 Call Stack: 0.0000 130880 1. {main}() G:\Documents\workspace\sym\web\app.php:0 0.0200 340984 2. Symfony\Component\HttpKernel\Kernel->handle() G:\Documents\workspace\sym\web\app.php:21 0.1800 2659792 3. Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle() G:\Documents\workspace\sym\app\bootstrap.php.cache:2249 
我越想理解这一点,就越感到困惑。文档说明将呈现
app\Resources\TwigBundle\views\Exception
中的简单
error404.html.twig
。(是的,我已经清除了prod缓存-多次!prod日志中没有条目。)文档是否错误,我确实需要创建一个异常处理程序来显示这个404页面,因为响应是200

更新: 所以我猜开发环境中的404并不意味着它将是prod中的404。然后我尝试了一个简单的异常处理程序来获取一个自定义错误页面,但是没有Monolog邮件。尝试将自定义处理程序与Monolog集成会导致以下结果,因为自定义处理程序使用细枝。难怪我头晕

[Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException] Circular reference detected for service "router", path: "cache_warmer -> router -> monolog.logger.router -> mana.exception.controller -> templating -> twig -> templating.helper.logout_url".

不太明显,错误是由于错误404.html.twig文件引起的。一旦纠正,它就变得有用了。抱歉。

什么是异常消息?@WouterJ:我已经编辑以显示上面完整的异常消息。这是响应。似乎无法加载资源(文件),而不是找不到的路由。@WouterJ:我想我把资源和找不到的路由混淆了。这里的区别是内部(我的代码)请求还是外部(用户添加的)URI请求?您是如何纠正的,我也有同样的问题,一个返回200的软404@对不起,我记不起细节了。我能做的最好的重构是在
…app\Resources
中有一个
TwigBundle\views\Exception
目录。在其中,我需要有一个正确配置的模板文件;我不记得错误404模板有什么问题。如果这与您的环境不符,我无法解释您的问题。无需道歉,即使以我对Symfony的所有经验来看,这个答案实际上也是非常有用的;)