¿Cómo habilito el indicador de mantenimiento de la versión 1.9 con acceso de administrador?

14

Como no veo el modo de mantenimiento en la interfaz de usuario de la versión 1.9 System > Configuration, solté un maintenance.flagarchivo en la raíz del sitio. Sin embargo, eso también bloquea el acceso a mi panel de administración. ¿Alguien puede decirme cómo mantener el modo de mantenimiento del sitio con acceso de administrador?

Cory
fuente

Respuestas:

16

Aquí hay una solución:

Abra index.php en la raíz y agregue (recordando editar la matriz 'permitida' para contener las IP a las que desea poder acceder al sitio);

$ip = $_SERVER['REMOTE_ADDR'];

$allowed = array('1.1.1.1','2.2.2.2'); // these are the IP's that are allowed to view the site.

luego cambia la línea

if (file_exists($maintenanceFile)) {

a

 if (file_exists($maintenanceFile) && !in_array($ip, $allowed)) { 

Sencillo. Ahora puede acceder al sitio (admin + front end), mientras que otros ven su modo de mantenimiento.

Fuente: http://inchoo.net/ecommerce/magento/maintenance-mode-in-magento/

JasonS
fuente
5

Hay un puñado de extensiones que hacen exactamente eso. Sin embargo, siguen siendo solo soluciones temporales, ya que la maintenance.flagfuncionalidad sigue ahí. Para eliminarlo, debe editar manualmente el archivo 'index.php', que a su vez puede causar problemas con las actualizaciones.

if (file_exists($maintenanceFile)) {
    include_once dirname(__FILE__) . '/errors/503.php';
    exit;
}

Así es como se implementa la funcionalidad 'maintenance.flag' en 'index.php'. Sin embargo, dado que necesita editar 'index.php', también podría hacer algo más elaborado, como:

if (file_exists($maintenanceFile) && strpos($_SERVER['REQUEST_URI'], '/admin/') === false) {
    include_once dirname(__FILE__) . '/errors/503.php';
    exit;
}

Tenga en cuenta que el código anterior es un truco rápido y sucio. Podría desarrollarlo aún más, ya que solo verifico si '/ admin /' existe en la url.

Pronto
fuente
antes de hacer esto, simplemente verifique cuál es request_uri y modifique la condición en consecuencia.
Kalyan Chakravarthi V
3

Y si está detrás de un equilibrador de carga que pasa la IP del cliente en el encabezado HTTP_X_FORWARDED_FOR, asegúrese de tenerlo en cuenta de esta manera:

// account for load balancer that passes client IP
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
   $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
}
if(empty($ip)) {
    $ip = $_SERVER['REMOTE_ADDR'];
}

// whitelist your ips
$allowed = array();
$allowed[]='WHITELIST.IP.ADDRESS.#1';
$allowed[]='WHITELIST.IP.ADDRESS.#2';

if (file_exists($maintenanceFile)) {
    if (file_exists($maintenanceFile) && !in_array($ip, $allowed)) { 
        include_once dirname(__FILE__) . '/errors/503.php';
        exit;
    }
}
Tegan Snyder
fuente
Muy útil para aquellos que usan un balanceador de carga AWS Ec2
asherrard
1

Puede configurar su propia página de mantenimiento y utilizar ErrorDocument 503 para enviar la página de mantenimiento. Excluya su dirección IP a través de RewriteCond para que pueda acceder a la página de todos modos y no ser redirigido:

RewriteEngine On
ErrorDocument 503 /errors/503.php
RewriteCond %{REMOTE_ADDR} !^4.3.2.1 [NC] #your IP
RewriteCond %{REMOTE_ADDR} !^4.3.2.2 [NC] #other IP if needed
RewriteCond %{REMOTE_ADDR} !^127.0.0.1 [NC] #localhost maybe needed depending on server setup
RewriteCond %{REQUEST_URI} !^/errors/503.php
RewriteCond %{REQUEST_URI} !^/media/
RewriteCond %{REQUEST_URI} !^/images/
RewriteCond %{REQUEST_URI} !^/css/
RewriteCond %{REQUEST_URI} !^/js/
RewriteCond %{REQUEST_URI} !^/skin/
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} !^/admin #your admin path
RewriteCond %{REQUEST_URI} !^/admin/
RewriteRule ^(.*) http://www.yourwebsite.com/errors/503.php [L,R=503]

Tenga en cuenta que también puede ser necesario incluir en la lista blanca servicios adicionales como pasarelas de pago para realizar pruebas.

Anna Völkl
fuente