Wie aktiviere ich das Wartungsflag für Version 1.9 mit Administratorzugriff?

14

Da der Wartungsmodus in der Benutzeroberfläche von Version 1.9 nicht angezeigt wird System > Configuration, habe ich eine maintenance.flagDatei im Stammverzeichnis der Site abgelegt . Dies blockiert jedoch auch meinen Admin-Panel-Zugriff. Kann mir jemand sagen, wie man den Site-Wartungsmodus mit Administratorzugriff aufrechterhält ?

Cory
quelle

Antworten:

16

Hier ist eine Lösung:

Öffnen Sie die Datei index.php im Stammverzeichnis und fügen Sie sie hinzu (denken Sie daran, das Array 'allowed' so zu bearbeiten, dass es die IP-Adressen enthält, über die Sie auf die Site zugreifen möchten).

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

dann ändern Sie die Zeile

if (file_exists($maintenanceFile)) {

zu

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

Einfach. Jetzt können Sie auf die Site zugreifen (Admin + Front-End), während andere den Wartungsmodus sehen.

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

JasonS
quelle
5

Es gibt eine Handvoll Erweiterungen, die genau das tun. Sie sind jedoch nur eine vorübergehende Problemumgehung, da die maintenance.flagFunktionalität noch vorhanden ist. Um es zu entfernen, müssen Sie die Datei 'index.php' manuell bearbeiten, was wiederum Probleme mit Upgrades verursachen kann.

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

So wird die 'maintenance.flag'-Funktionalität in' index.php 'implementiert. Da Sie jedoch 'index.php' bearbeiten müssen, können Sie auch etwas Aufwändigeres tun, wie zum Beispiel:

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

Bitte beachten Sie, dass der obige Code ein schneller und schmutziger Hack ist. Sie könnten es weiterentwickeln, da ich nur überprüfe, ob '/ admin /' in der URL existiert.

Pronto
quelle
Bevor Sie dies tun, überprüfen Sie einfach, was das request_uri ist, und ändern Sie die Bedingung entsprechend.
Kalyan Chakravarthi V
3

Und wenn Sie sich hinter einem Load Balancer befinden, der die Client-IP-Adresse im HTTP_X_FORWARDED_FOR-Header übergibt, stellen Sie sicher, dass Sie dies folgendermaßen berücksichtigen:

// 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
quelle
Sehr nützlich für
Benutzer
1

Sie können Ihre eigene Wartungsseite einrichten und ErrorDocument 503 zum Senden der Wartungsseite verwenden. Schließen Sie Ihre IP-Adresse über RewriteCond aus, damit Sie trotzdem auf die Seite zugreifen können und nicht weitergeleitet werden:

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]

Bitte beachten Sie, dass es auch erforderlich sein kann, zusätzliche Dienste wie Zahlungs-Gateways zum Testen auf die Whitelist zu setzen.

Anna Völkl
quelle