自定义404页面,Silex未在prod配置中呈现

时间:2012-08-13 08:25:20

标签: http-status-code-404 silex

在尝试使用 Silex 微框架显示自定义404错误页面时,我正在努力。

我的项目配置如下:

  • index.php 页面以生产模式运行,加载prod.php配置文件
  • 获得 index_dev.php 调试模式运行。它还使用prod.php配置文件,但某些设置会被dev.php文件覆盖,例如$app['debug']设置为 true

所以基本上配置都是一样的。

我已经定义了一个错误处理程序,如下所示:

$app->error(function (\Exception $e, $code) use ($app) {

    // commented for testing purposes
    /*if ($app['debug']) {
        return;
    }*/

    if ($code == 404) {

        $loader = $app['dataloader'];
        $data = array(
            'global' => $loader->load('global'),
            'common' => $loader->load('common', $app['locale']),
            'header' => $loader->load('header', $app['locale']),
            'footer' => $loader->load('footer', $app['locale'])
        );

        return new Response( $app['twig']->render('404.html.twig', array( 'data' => $data )), 404);
    }

    return new Response('We are sorry, but something went terribly wrong.', $code);

});

尝试访问http://localhost:8888/index_dev.php/my-non-existing-page时,我会按预期呈现并显示我的404模板。

尝试访问http://localhost:8888/my-non-existing-page时,我的404模板未呈现,而是获得标准的404错误页面!

可能很难帮助我。如果需要,请随时询问更多详细信息。我只是愿意更好地了解这里发生的事情。

1 个答案:

答案 0 :(得分:3)

您需要重写对index.php文件的请求。请参阅下面的一个基本示例来实现此功能。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L,QSA]