Jak włączyć flagę konserwacji wersji 1.9 z dostępem administratora

14

Ponieważ nie widzę trybu konserwacji w interfejsie użytkownika w wersji 1.9 System > Configuration, upuściłem maintenance.flagplik w katalogu głównym witryny. Jednak to również blokuje dostęp do panelu administracyjnego. Czy ktoś może mi powiedzieć, jak utrzymać tryb konserwacji witryny z dostępem administratora?

Cory
źródło

Odpowiedzi:

16

Oto jedno rozwiązanie:

Otwórz plik index.php w katalogu głównym i dodaj (pamiętając o edycji tablicy „dozwolonej”, aby zawierała adresy IP, które chcesz mieć dostęp do strony);

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

następnie zmień linię

if (file_exists($maintenanceFile)) {

do

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

Prosty. Teraz możesz uzyskać dostęp do strony (administrator + interfejs), podczas gdy inni widzą jej tryb konserwacji.

Źródło: http://inchoo.net/ecommerce/magento/maintenance-mode-in-magento/

JasonS
źródło
5

Istnieje kilka rozszerzeń, które właśnie to robią. Jednak nadal są to tylko tymczasowe obejścia, ponieważ maintenance.flagfunkcjonalność nadal istnieje. Aby go usunąć, musisz ręcznie edytować plik „index.php”, co z kolei może powodować problemy z aktualizacjami.

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

W ten sposób zaimplementowano funkcję „Maintenance.flag” w pliku „index.php”. Ponieważ jednak musisz edytować plik „index.php”, możesz równie dobrze zrobić coś bardziej skomplikowanego, na przykład:

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

Pamiętaj, że powyższy kod to szybki i brudny hack. Możesz go rozwinąć, ponieważ sprawdzam tylko, czy w adresie URL jest „/ admin /”.

Pronto
źródło
zanim to zrobisz, sprawdź, co to jest request_uri i odpowiednio zmodyfikuj warunek.
Kalyan Chakravarthi V
3

A jeśli jesteś za modułem równoważenia obciążenia, który przekazuje adres IP klienta w nagłówku HTTP_X_FORWARDED_FOR, pamiętaj o uwzględnieniu go w następujący sposób:

// 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
źródło
Bardzo przydatne dla osób korzystających z modułu równoważenia obciążenia AWS Ec2
asherrard
1

Możesz skonfigurować własną stronę konserwacji i użyć ErrorDocument 503, aby wysłać stronę konserwacji. Wyklucz swój adres IP za pośrednictwem RewriteCond, aby mimo to uzyskać dostęp do strony i nie zostać przekierowanym:

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]

Należy pamiętać, że może być również konieczne dodanie do białej listy dodatkowych usług, takich jak Payment Gateways, w celu przetestowania.

Anna Völkl
źródło