404页面正在开发环境,但在Symfony2中的Prod环境中无法正常工作

时间:2014-02-04 05:35:18

标签: symfony

以下文件app和app.dev文件来自生产环境

app.php文件

<?php
require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
//require_once __DIR__.'/../app/AppCache.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('prod', true);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);
$kernel->handle(Request::createFromGlobals())->send();
//header("Location: maintainance.php");

以下文件app.dev文件来自生产环境。当我在app.dev.php中将AppKernel设置为true并在app.php文件中将prod设置为false时,则404页面正常工作。但是当我做prod = true和dev = false时,它无效。

app_dev.php

<?php

// if you don't want to setup permissions the proper way, just uncomment the following PHP line
// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
//umask(0000);

// this check prevents access to debug front controllers that are deployed by accident to production servers.
// feel free to remove this, extend it, or make something more sophisticated.

if (isset($_SERVER['HTTP_CLIENT_IP'])
    //|| isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    //|| !in_array(@$_SERVER['REMOTE_ADDR'], array(
    //    '127.0.0.1',
    //    '::1',
    //))
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}

require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('dev', false);
$kernel->loadClassCache();
$kernel->handle(Request::createFromGlobals())->send();

请帮帮我..

这是.htaccess文件

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.xyz\.com [NC]
RewriteRule ^(.*)$ http://www.xyz.com/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]

</IfModule>

2 个答案:

答案 0 :(得分:1)

AppKernel构造函数中的第二个参数定义是否应启用调试。如果启用了调试,404页面通常不起作用 - 而是获得symfony 2调试输出。

TL; DR:这应该可以解决问题:

$kernel = new AppKernel('prod', false);

答案 1 :(得分:0)

如果&#34; 在Symfony2中不适用于Prod环境&#34;这意味着您的自定义404页面在开发模式下显示但不在生产中,这意味着一个原因是围绕生产缓存。

由于prod环境针对速度进行了优化;配置,路由和Twig模板被编译成平面PHP类并进行缓存。

因此,在开发项目时,所有文件都以非编译和缓存格式存储,并且您的生产环境不知道任何更改。

要应用所有更改,您应该使用命令行环境清除生产缓存:

$ php bin/console cache:clear --env=prod --no-debug