以下文件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>
答案 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