Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ghean

[Resolvido] Redirecionar ao colocar sistema em manutenção

Recommended Posts

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();
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com a mesma duvida mais esse codigo que o Ghean criou deve ser colocado no arquivo .htaccess ou no index.php ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.