Domanda

Sono stato con Joomla e mi piace il suo impianto amministrativo di mettere il sito in manutenzione. Come ho visto, tutte le richieste al sito se si trova in modalità di manutenzione viene indirizzato a una singola pagina. Se voglio aggiungere la mia "Sito fuori servizio per manutenzione" del modulo per un sito non Joomla, come faccio a fare questo? Sto utilizzando un framework MVC in PHP chiamato Kohana nella sua versione 2, che è simile con Codeigniter. Ho una classe Router dove posso controllare dove un certo indirizzo andare. L'unico approccio che posso pensare è reindirizzare ogni richiesta per una particolare funzione di controllo quando il sito è giù, ma come faccio a fare questo? Non posso reindirizzare tutti gli URL giusto possibilmente manualmente?

È stato utile?

Soluzione

Kohana 3 : È possibile definire un catch-all percorso in bootstrap.php prima che le linee Kohana::modules():

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

o si può anche pasticciare con la richiesta di fare lo stesso:

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

Kohana 2 : Si avrebbe bisogno di estendere Controller e di gestire il 'in manutenzione' la visualizzazione della pagina nel costruttore (ma è necessario assicurarsi che tutti i controller di estendere questa classe controller invece che la vaniglia uno):

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

In alternativa si può anche utilizzare il sistema di aggancio per farlo, con l'aggiunta di un file nella cartella hooks (assicurarsi di abilitare i ganci nel 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'));
    }
}

Come si può vedere, ci sono in realtà molti modi per fare cose in Kohana perché è un framework PHP molto flessibile:)

Altri suggerimenti

Date un'occhiata al instradamento documentazione . Si dovrebbe essere in grado di usare un'espressione regolare che reindirizza qualsiasi URI ad una specifica di controllo / azione. L'unica domanda che resta sarebbe come trasformare questa regola on / off.

Si potrebbe verificare una bandiera database in un comune di intestazione (presumibilmente hai qualche comuni includono che si collega al database, ecc), e se è impostato il flag, il rendering di una pagina e uscire particolare (avendo cura di fare tutto il solite cose di pulizia come chiusura delle connessioni di database, ecc).

Stai usando Apache? Aggiungere questo al file .htaccess nella vostra web root (o alla dichiarazione vhost per il sito) per reindirizzare tutte le richieste per un "in manutenzione" pagina:

Redirect 301 / /maintenace_page.html

Mi vengono in mente due idee per rendere questo accada.

  1. Come Larry ha detto, usare le espressioni regolari per reindirizzare tutte le richieste a una posizione specifica. Quindi, prima si dovrebbe determinare se il sito era in modalità di manutenzione (probabilmente utilizzando un flag di database o un'impostazione file di configurazione), quindi se fosse, utilizzare la funzione di espressione regolare di routing per reindirizzare tutto il traffico in un solo luogo.

  2. Si potrebbe verificare se il sito era in modalità di manutenzione nel costruttore di ogni controller e reindirizzare a seconda delle necessità. Questo non è probabilmente la soluzione più ottimale in quanto si sarebbe ripetere lo stesso codice per ogni controller. Così, anche se avrebbe funzionato, si sarebbe probabilmente meglio con le espressioni regolari.

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

PHP espressioni regolari: http: //www.php .net / manuale / it / reference.pcre.pattern.syntax.php

I controllori in Kohana: http://docs.kohanaphp.com/general/controllers

Nel vostro index.php definire una costante chiamata IN_MAINTENANCE

Crea una richiamata in questo modo in una file di gancio :

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

E aggiungerlo come nell'evento system.post_routing.

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

Quando si carica il sito modificare il valore della IN_MAINENANCE TRUE e tutte le richieste verrà reindirizzato alla pagina di manutenzione.

Vedere la Evento / documentazione Hook per ulteriori informazioni sulla creazione di un gancio.

Un altro metodo in cui si attiva questo è di controllo di un file:., Se esiste, la manutenzione sta iniziando così ruotare il sito off

Se è così, si può fare una delle cose di cui sopra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top