Comment activer l'indicateur de maintenance de la version 1.9 avec un accès administrateur

14

Parce que je ne vois pas le mode de maintenance dans l'interface utilisateur de la version 1.9 System > Configuration, j'ai déposé un maintenance.flagfichier à la racine du site. Cependant, cela bloque également l'accès à mon panneau d'administration. Quelqu'un peut-il me dire comment maintenir le mode de maintenance du site avec un accès administrateur?

Cory
la source

Réponses:

16

Voici une solution:

Ouvrez index.php à la racine et ajoutez (en vous souvenant de modifier le tableau «autorisé» pour contenir les IP que vous souhaitez pouvoir accéder au 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.

puis changez de ligne

if (file_exists($maintenanceFile)) {

à

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

Facile. Vous pouvez maintenant accéder au site (admin + frontal), tandis que d'autres voient son mode de maintenance.

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

JasonS
la source
5

Il y a une poignée d'extensions qui font exactement cela. Cependant, ils ne sont qu'une solution de contournement temporaire car la maintenance.flagfonctionnalité est toujours là. Pour le supprimer, vous devez éditer manuellement le fichier 'index.php' qui, à son tour, peut entraîner des problèmes avec les mises à niveau.

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

C'est ainsi que la fonctionnalité 'maintenance.flag' est implémentée dans 'index.php'. Cependant, puisque vous devez éditer 'index.php', vous pourriez aussi bien faire quelque chose de plus élaboré, comme:

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

Veuillez noter que le code ci-dessus est un hack rapide et sale. Vous pouvez le développer davantage, car je vérifie simplement si '/ admin /' existe dans l'url.

Pronto
la source
avant de faire cela, vérifiez simplement quel est le request_uri et modifiez la condition en conséquence.
Kalyan Chakravarthi V
3

Et si vous êtes derrière un équilibreur de charge qui transmet l'adresse IP du client dans l'en-tête HTTP_X_FORWARDED_FOR, assurez-vous d'en tenir compte comme ceci:

// 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
la source
Très utile pour ceux qui utilisent un équilibreur de charge AWS Ec2
asherrard
1

Vous pouvez configurer votre propre page de maintenance et utiliser ErrorDocument 503 pour envoyer la page de maintenance. Excluez votre adresse IP via RewriteCond afin que vous puissiez accéder à la page de toute façon et ne pas être redirigé:

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]

Veuillez noter qu'il peut également être nécessaire de mettre en liste blanche des services supplémentaires tels que les passerelles de paiement pour les tests.

Anna Völkl
la source