Pregunta

He estado usando Joomla y amo a su facilidad de administración para poner el sitio en mantenimiento. Como he visto, todas las peticiones al sitio si está en modo de mantenimiento se encamina a una sola página. Si quiero añadir mi propio "sitio por mantenimiento" módulo para un sitio Joomla no, ¿cómo puedo hacer esto? Estoy usando un framework MVC en PHP Kohana llamada en su versión 2, que es similar con CodeIgniter. Tengo una clase Router donde puedo controlar dónde ir una determinada dirección. El único enfoque que se me ocurre es redirigir todas las peticiones a una función de controlador en particular cuando El sitio está desactivado, pero ¿cómo puedo hacer esto? No puedo modificar el trazado de todas las URL correcta, posiblemente de forma manual?

¿Fue útil?

Solución

Kohana 3 : Se puede definir un cajón de sastre en su ruta bootstrap.php antes de las líneas Kohana::modules():

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

o incluso se puede meterse con la solicitud de hacer lo mismo:

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

Kohana 2 : Se podría necesitar extender Controller y manejar el 'bajo mantenimiento' visualización de la página en el constructor (pero hay que asegurarse de que todos los controladores de esta clase se extienden controlador en lugar de la vainilla 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;
        }
    }
}

O incluso se puede utilizar el sistema de gancho para hacerlo, mediante la adición de un archivo en la carpeta de hooks (asegúrese de habilitar ganchos en su 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 se puede ver, en realidad hay muchas maneras de cómo hacer cosas en Kohana porque es un framework PHP muy flexible:)

Otros consejos

Tome una mirada en el enrutamiento documentación . Usted debe ser capaz de utilizar una expresión regular que redirige cualquier URI a un controlador / acción específica. La única pregunta que queda sería cómo convertir esa regla de encendido / apagado.

Usted puede comprobar una bandera de base de datos en una cabecera común (es de suponer que tienes alguna comunes son los que se conecta a la base de datos, etc.), y si se establece el indicador, rinde una página en particular y salida (asegurándose de que hacer todo el limpieza de las cosas habituales, como el cierre de conexiones de bases de datos, etc.).

¿Está ejecutando Apache? Agregue esto a su archivo .htaccess en su web raíz (o la declaración host virtual para el sitio) para redirigir todas las peticiones a un "bajo mantenimiento" de la página:

Redirect 301 / /maintenace_page.html

Se me ocurren dos ideas para que esto suceda.

  1. Al igual que Larry dijo, utilizar expresiones regulares para redirigir todas las peticiones a una ubicación específica. Así, primero se determinará si el sitio era en modo de mantenimiento (probablemente usando una bandera base de datos o un ajuste de archivo) y, a continuación, si lo fuera, utilizar la función de la expresión regular de enrutamiento para redirigir todo el tráfico a un solo lugar.

  2. Se puede comprobar si el sitio estaba en modo de mantenimiento en el constructor de cada controlador y redirigir según sea necesario. Esto probablemente no es la solución más óptima, ya que estaría repitiendo el mismo código para cada controlador. Así, a pesar de que iba a funcionar, probablemente sería mejor con las expresiones regulares.

El encaminamiento en Kohana: http://docs.kohanaphp.com/general/routing

Las expresiones regulares de PHP: http: //www.php .NET / manual / es / reference.pcre.pattern.syntax.php

Controladores en Kohana: http://docs.kohanaphp.com/general/controllers

En su index.php definir una constante denominada IN_MAINTENANCE

Crear una devolución de llamada como tal en un archivo gancho :

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

Y agregarlo como en el caso system.post_routing.

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

Al cargar su sitio cambie el valor de IN_MAINENANCE TRUE y todas las solicitudes será redirigido a la página de mantenimiento.

Vea la Evento / documentación gancho para obtener más información sobre la creación de un gancho.

Otro método de alternar esto es mediante la comprobación de un archivo:. Si es que existe, el mantenimiento está comenzando así convertir el sitio fuera

Si es así, se puede hacer ninguna de las cosas mencionadas anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top