Pergunta

Eu tenho usado o Joomla e eu amo a sua instalação administrativa para colocar o site do ar para manutenção. Como já visto, todas as solicitações para o site se ele está em modo de manutenção é encaminhado para uma única página. Se eu quiser adicionar o meu próprio "site do ar para manutenção" módulo para um site não-Joomla, como posso fazer isso? Eu estou usando um framework MVC em PHP chamado Kohana em sua versão 2, que é semelhante com CodeIgniter. Eu tenho uma classe Router onde posso controlar onde um determinado endereço ir. A única abordagem que posso pensar é redirecionar todos os pedidos para a função de controlador específico quando o site está em baixo, mas como posso fazer isso? Não posso voltar a rota manualmente todas as urls certo?

Foi útil?

Solução

Kohana 3 : Você pode definir um catch-all rota em seu bootstrap.php antes das linhas Kohana::modules():

if (/* check if site is in under maintenance mode */) {
    Route::set('defaulta', '(<id>)', array('id' => '.*'))
        ->defaults(array(
            'controller' => 'errors',
            'action'     => 'maintenance',
        ));
}

Ou você ainda pode mexer com a solicitação para fazer o mesmo:

if (/* check if site is in under maintenance mode */) {
    echo Request::factory('errors/maintenance')
        ->execute()
        ->send_headers()
        ->response;
}

Kohana 2 : Você precisaria estender Controller e lidar com o 'em manutenção' exibição da página no construtor (mas você precisa ter certeza de todos os controladores de estender esta classe de controlador em vez de um baunilha):

abstract class Custom_Controller extends Controller {

    public function __construct()
    {
        parent::__construct();
        if (/* check if site is in under maintenance mode */) {
            $page = new View('maintenance');
            $page->render(TRUE);
            exit;
        }
    }
}

Ou você ainda pode utilizar o sistema de gancho para fazê-lo, adicionando um arquivo na sua pasta hooks (certifique-se de permitir que os ganchos em sua config.php):

Event::add('system.ready', 'check_maintenance_mode');

function check_maintenance_mode() {
    if (/* check if site is in under maintenance mode */) {
        Kohana::config_set('routes', array('_default' => 'errors/maintenance'));
    }
}

Como você pode ver, há realmente muitas maneiras como fazer coisas em Kohana porque é um framework PHP muito flexível:)

Outras dicas

Dê uma olhada no encaminhamento documentação . Você deve ser capaz de usar uma expressão regular que redireciona quaisquer uri para um controlador específico / ação. A única questão seria como transformar essa regra on / off.

Você pode verificar uma bandeira de banco de dados em um cabeçalho comum (presumivelmente você tem algum comuns incluem que se conecta ao banco de dados etc), e se o sinalizador está definido, processar uma página e sair particular (certificando-se de fazer todo o usuais coisas de limpeza como fechar conexões de banco de dados, etc).

Você está executando Apache? Adicione isto a seu arquivo .htaccess em sua raiz web (ou a declaração vhost para o site) para redirecionar todas as solicitações para um "em manutenção" página:

Redirect 301 / /maintenace_page.html

Eu posso pensar de duas idéias para fazer isso acontecer.

  1. Como Larry disse, usar expressões regulares para redirecionar todas as solicitações para um local específico. Então, primeiro você determinar se o site estava em modo de manutenção (provavelmente usando uma bandeira banco de dados ou um ambiente arquivo de configuração), em seguida, se fosse, usar o recurso de expressão regular de roteamento para redirecionar todo o tráfego para um só lugar.

  2. Você pode verificar se o site estava em modo de manutenção no construtor de cada controlador e redirecionamento conforme necessário. Esta não é provavelmente a solução mais ideal, pois você estaria repetindo o mesmo código para cada controlador. Assim, mesmo que ele iria trabalhar, você provavelmente seria melhor com as expressões regulares.

Routing em Kohana: http://docs.kohanaphp.com/general/routing

PHP expressões regulares: http: //www.php .net / manual / en / reference.pcre.pattern.syntax.php

Controllers em Kohana: http://docs.kohanaphp.com/general/controllers

Em seu index.php definir uma constante chamada IN_MAINTENANCE

Criar um callback como assim em um arquivo gancho :

function in_maintenance()
{
    if(IN_MAINTENANCE)
    {
         Router::$controller = 'my_maintenance_controller';
         Router::$method = 'index';
    }
}

E adicioná-lo como para o evento system.post_routing.

Event::add('system.post_routing', 'in_maintenance');

Quando você carregar sua mudança de local o valor de IN_MAINENANCE para TRUE e todas as solicitações será redirecionado para sua página de manutenção.

Veja a Evento / documentação gancho para mais informações sobre a criação de um gancho.

Outro método de alternar este é através da verificação de um arquivo:., Se existir, a manutenção está começando de modo a transformar o site off

Se sim, você pode fazer qualquer uma das coisas mencionadas acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top