2014-02-04 4 views
0

Следующие файлы приложений и файлы app.dev от производственной среды404 страница работает Dev окружающую среду, но не работает в Prod среде в Symfony2

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"); 

Следующая приложение файл. dev - это производственная среда. Когда я устанавливаю AppKernel в app.dev.php на true и prod на false в файле app.php, тогда работает 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

Это что-то делать с файлом .htaccess. Не могли бы вы опубликовать его? –

+0

Hai michiel, я добавил файл .htaccess. любезно пройти через это. –

ответ

1

Второй параметр в конструкторе AppKernel определяет, если отладка должна быть включена или нет. Если отладка включена, страница 404 обычно не работает - вместо этого вы получаете вывод отладки symfony 2.

TL; DR: Это должно сделать трюк:

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

Когда я делаю эту настройку, тогда работает 404 страница, но моя панель инструментов и другие вещи не будут работать. Для этого условия, что нужно делать? –

+0

С панелью инструментов вы имеете в виду панель инструментов отладки Symfony и страницу профилировщика? – Pierre

+0

Это обычная ветка страница. Когда я использую $ kernel = новый AppKernel ('prod', false); то вместо отображения моей страницы появляется белый экран. –

0

Если «не работает в Prod среде в Symfony2» означает это, что пользовательская страница 404 шоу в режиме разработки, но не в производстве, это означает, что одна причина связана с производственным кешем.

Поскольку среда prod оптимизирована для скорости; шаблоны конфигурации, маршрутизации и Twig компилируются в плоские классы PHP и кэшируются.

Итак, когда вы разрабатываете проект, все файлы хранятся в некомпилированном и кэшированном формате, и ваша производственная среда не знает о каких-либо изменениях.

Чтобы применить все изменения, которые вы должны очистить кэш производства с командной строки среды:

$ php bin/console cache:clear --env=prod --no-debug 
Смежные вопросы