Como habilito o sinalizador de manutenção da versão 1.9 com acesso de administrador

14

Como não vejo o Modo de manutenção na interface do usuário da versão 1.9 System > Configuration, soltei um maintenance.flagarquivo na raiz do site. No entanto, isso também bloqueia o acesso ao meu painel de administração. Alguém pode me dizer como manter o modo de manutenção do site com acesso de administrador?

Cory
fonte

Respostas:

16

Aqui está uma solução:

Abra index.php na raiz e adicione (lembre-se de editar a matriz 'permitida' para conter os IPs que você deseja que sejam capazes de acessar o site);

$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.

então mude a linha

if (file_exists($maintenanceFile)) {

para

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

Simples. Agora você pode acessar o site (admin + front-end), enquanto outros veem seu modo de manutenção.

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

JasonS
fonte
5

Existem várias extensões que fazem exatamente isso. No entanto, eles ainda são apenas soluções temporárias, pois a maintenance.flagfuncionalidade ainda está lá. Para removê-lo, você deve editar manualmente o arquivo 'index.php', que por sua vez pode causar problemas com as atualizações.

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

É assim que a funcionalidade 'maintenance.flag' é implementada no 'index.php'. No entanto, como você precisa editar 'index.php', você também pode fazer algo mais elaborado, como:

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

Observe que o código acima é um hack rápido e sujo. Você pode desenvolvê-lo ainda mais, pois apenas verifico se '/ admin /' existe no URL.

Pronto
fonte
Antes de fazer isso, verifique qual é o request_uri e modifique a condição de acordo.
Kalyan Chakravarthi V
3

E se você está atrás de um balanceador de carga que está passando o IP do cliente no cabeçalho HTTP_X_FORWARDED_FOR, certifique-se de prestar contas da seguinte maneira:

// 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
fonte
Altamente útil para aqueles que usam um balanceador de carga AWS
Ec2
1

Você pode configurar sua própria página de manutenção e usar o ErrorDocument 503 para enviar a página de manutenção. Exclua seu endereço IP via RewriteCond para que você possa acessar a página de qualquer maneira e não seja redirecionado:

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]

Observe que também pode ser necessário adicionar serviços adicionais à lista de permissões, como gateways de pagamento para testes.

Anna Völkl
fonte