Ho utilizzato Joomla e mi piace la sua struttura amministrativa per mettere il sito in manutenzione. Come ho visto, tutte le richieste al sito se è in modalità di manutenzione vengono indirizzate a una singola pagina. Se voglio aggiungere il mio modulo "site down for maintenance" per un sito non Joomla, come posso fare? Sto usando un framework MVC in PHP chiamato Kohana nella sua versione 2 che è simile a Codeigniter. Ho una classe Router in cui posso controllare dove va un determinato indirizzo. L'unico approccio che posso pensare è di reindirizzare ogni richiesta a una particolare funzione del controller quando il sito non è attivo, ma come faccio? Non riesco a reindirizzare manualmente tutti gli URL, giusto?approccio per "sito inattivo per manutenzione"
risposta
Kohana 3: È possibile definire un catch-all percorso in bootstrap.php
prima delle Kohana::modules()
linee:
if (/* check if site is in under maintenance mode */) {
Route::set('defaulta', '(<id>)', array('id' => '.*'))
->defaults(array(
'controller' => 'errors',
'action' => 'maintenance',
));
}
Oppure si può anche pasticciare con la richiesta di fare la stessa cosa:
if (/* check if site is in under maintenance mode */) {
echo Request::factory('errors/maintenance')
->execute()
->send_headers()
->response;
}
Kohana 2: È necessario estendere Controller
e gestire la 'sotto manutenzione visualizzazione della pagina e' 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;
}
}
}
Oppure si può anche utilizzare il sistema di aggancio per farlo, con l'aggiunta di un il file nella cartella hooks
(assicuratevi di abilitare i ganci nel vostro 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 :)
È possibile controllare un flag di database in un'intestazione comune (presumibilmente si dispone di alcuni elementi comuni che si connettono al database, ecc.) E se il flag è impostato, eseguire il rendering di una particolare pagina ed uscire (assicurandosi di fare tutto le solite cose di pulizia come la chiusura delle connessioni al database, ecc.).
Dai un'occhiata al routing documentation. Dovresti essere in grado di usare un'espressione regolare che reindirizza qualsiasi uri a un controller/azione specifico. L'unica domanda rimasta sarebbe come attivare/disattivare questa regola.
Posso pensare a due idee per farlo accadere.
Come ha detto Larry, utilizzare le espressioni regolari per reindirizzare tutte le richieste in una posizione specifica. Quindi, per prima cosa determineresti se il sito era in modalità manutenzione (probabilmente usando un flag del database o un'impostazione del file di configurazione), quindi se lo fosse, usa la funzione di espressione regolare del routing per reindirizzare tutto il traffico in un posto.
È possibile verificare se il sito era in modalità di manutenzione nel costruttore di ogni controller e reindirizzare se necessario. Questa probabilmente non è la soluzione ottimale dal momento che si ripeterà lo stesso codice per ciascun controller. Quindi, anche se funzionasse, probabilmente staresti meglio con le espressioni regolari.
Routing in Kohana: http://docs.kohanaphp.com/general/routing
PHP espressioni regolari: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
controller in Kohana: http://docs.kohanaphp.com/general/controllers
sono in esecuzione Apache? Aggiungere questo al file .htaccess
nella vostra web root (o alla dichiarazione vhost per il sito) per reindirizzare tutte le richieste a una pagina "in manutenzione":
Redirect 301//maintenace_page.html
sarebbe buono ma posso disattivarlo con uno script php se lo desidero? – yretuta
Sicuro. Basta avere uno script PHP edit .htaccess e sostituire 'Redirect 301// maintenace_page.html' con' #Redirect 301// maintenace_page.html' - il '# denota una riga di commento, e il reindirizzamento non verrà eseguito. – leepowers
Nel vostro index.php definire una costante chiamata IN_MAINTENANCE
Crea una richiamata in questo modo in un hook file:
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 carichi il tuo sito cambiare il valore di IN_MAINENANCE alle richieste TRUE e tutti verrà reindirizzato alla pagina di manutenzione.
Vedere Event/Hook documentation per ulteriori informazioni sulla creazione di un gancio.
Un altro metodo di attivazione è la ricerca di un file: se esiste, la manutenzione è in corso, quindi spegni il sito.
In tal caso, è possibile eseguire una delle operazioni sopra menzionate.
- 1. Implementare la pagina "Inattivo per manutenzione"
- 2. Qual è il codice di stato HTTP corretto da inviare quando un sito è inattivo per manutenzione?
- 3. Reindirizza tomcat alla pagina di manutenzione quando inattivo
- 4. Come implementare una pagina di manutenzione intelligente per nginx visualizzata quando il server sottostante è inattivo?
- 5. Approccio più efficiente per il sito Web PHP multilingue
- 6. PhoneGap - Approccio per l'autenticazione su un sito Web remoto?
- 7. MSDeploy e "sito in manutenzione" pagina
- 8. Metti un sito web in modalità manutenzione?
- 9. Come implementare "Sito in manutenzione" per il sito Web Windows Azure?
- 10. Codice di stato HTTP per database inattivo
- 11. ListBox SystemColor per elemento inattivo?
- 12. approccio DRY per Django
- 13. Approccio per correggere NoClassDefFoundError?
- 14. Come implementare la "Modalità manutenzione" sul sito Web già stabilito
- 15. App universale per Android Approccio
- 16. C# Per quanto tempo l'utente era inattivo
- 17. trovare gameobject inattivo per tag in unity3d
- 18. Se prendo il mio sito web offline per manutenzione, questo rovina il mio Google Juice (tm)?
- 19. Come è implementata la pagina "È offline per la manutenzione"?
- 20. caricamento della pagina di manutenzione personalizzata per Heroku
- 21. .htaccess Manutenzione IP multipli
- 22. set approccio per rimuovere contenute punti
- 23. Struttura dati/approccio per raytracing efficiente
- 24. Approccio pratico per mantenere aggiornato jQuery?
- 25. Il miglior approccio per l'analisi XML sull'iPhone
- 26. Miglior approccio di registrazione per l'app composita?
- 27. Approccio per lo sviluppo di applicazioni disconnesse
- 28. Approccio test unitario per classi/metodi generici
- 29. API Web Approccio migliore per restituire HttpResponseMessage
- 30. Compositore suggerito approccio per i pacchetti interni
Mi piace questa idea. +1 – Abinadi