Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou usando um plugin de segurança postado pelo Fabyo.
Onde tenho o redirect do login está funcionando normalmente.
if (strtolower($sControllerName) != 'login' && !$oAuth->hasIdentity())
{
$oFrontController = Zend_Controller_Front::getInstance();
$sBaseUrl = $oFrontController->getBaseUrl();
$this->getResponse()->setRedirect($sBaseUrl . '/login/');
$this->getResponse()->sendHeaders();
exit();
}
Inseri em meu application.ini uma variavel que será usada colocar o sistema em manutenção, ou seja, caso seja true o valor dessa variavel, o usuario será redirecionado para uma tela com a mensagem de manuntenção.
Mas quando uso o redirect ele não funciona.
No firefox (4.0) exibe a seguinte mensagem:
Redirecionamento incorreto O Firefox detectou que o pedido para este endereço não será concluído devido à forma que o servidor o está redirecionando.
Este problema algumas vezes pode ser causado pela desativação ou bloqueio de cookies.
No IE, a pagina fica carrengando até cair.
Segue trexo onde faço essa verificação:
$config = Zend_Registry::get('config');
if( $config->manutencao )
{
if ($oAuth->hasIdentity())
{
$oAuth->clearIdentity();
}
$this->getResponse()->setRedirect('/manutencao/');
$this->getResponse()->sendHeaders();
exit();
}Oi Matias, sua dica funcionou, perfeitamente.
Mas somente quando acesso o endereço normal do sistema (http://meusistema.com).
Se tento acessar um modulo (http://meusistema.com/pesquisas) ele deixa acessar.
Diante da sua proposta dei uma verificada no manual e então corrigi da seguinte forma.
[manutencao : production]
resources.router.routes.manutencao.route = "/*"
resources.router.routes.manutencao.defaults.controller = "manutencao"
Muito obrigado pela dica.
Ghean
Obrigado por compartilhar esta modificação na solução. Ajudará outras pessoas com o mesmo problema. Vou editar o título para algo que tenha mais relação com a solução encontrada.
Carlos Eduardo
Outra coisa que esqueci de mensionar foi que como utilizo servidor Windows (IIS), não possuo o arquivo .htacess.
Então altero o ambiente da aplicação no index.php
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'manutencao'));
Tem jeito mais correto de fazer do que assim:
define('APPLICATION_ENV', 'manutencao');
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
Este defined verifica se está definido. Caso não esteja, cria a constante. Então, você pode criar direto a constante, como eu coloquei ali.
Carlos Eduardo
:joia:
Estou com a mesma duvida mais esse codigo que o Ghean criou deve ser colocado no arquivo .htaccess ou no index.php ?
Ele está fazendo um redirecionamento infinito. Você precisa excluir o /manutencao/ da condição de redirecionamento. Veja que, por ser um plugin, ele é executado em todas as vezes que você carrega uma página. Eu, particularmente, faria diferente.
application.ini
[manutencao : production]
resources.router.routes.manutencao.route = "/"
resources.router.routes.manutencao.defaults.controller = "manutencao"
Quando você quiser colocar o sistema em manutenção, você adiciona esta linha ao arquivo .htaccess:
SetEnv APPLICATION_ENV manutencao
A rota definida vai capturar qualquer requisição e enviar para o controller manutencao, mas somente quando ficar definido que o ambiente neste momento é de manutenção.
Captou a ideia?
Carlos Eduardo