Как включить флаг обслуживания версии 1.9 с правами администратора

14

Поскольку я не вижу Режим обслуживания в интерфейсе версии 1.9 System > Configuration, я удалил maintenance.flagфайл в корне сайта. Однако это также блокирует доступ к моей панели администратора. Может кто-нибудь подсказать, как поддерживать режим обслуживания сайта с правами администратора?

Cory
источник

Ответы:

16

Вот одно из решений:

Откройте index.php в корневом каталоге и добавьте (не забудьте отредактировать массив 'позволен', чтобы он содержал IP-адреса, которые вы хотите иметь доступ к сайту);

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

затем измените строку

if (file_exists($maintenanceFile)) {

в

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

Просто. Теперь вы можете получить доступ к сайту (admin + front end), в то время как другие видят его режим обслуживания.

Источник: http://inchoo.net/ecommerce/magento/maintenance-mode-in-magento/

Jasons
источник
5

Есть несколько расширений, которые делают именно это. Однако они все еще являются временными обходными путями, поскольку maintenance.flagфункциональность все еще там. Чтобы удалить его, вы должны вручную отредактировать файл index.php, что, в свою очередь, может вызвать проблемы с обновлениями.

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

Вот как функциональность 'maintenance.flag' реализована в index.php. Однако, поскольку вам нужно отредактировать файл index.php, вы можете сделать что-то более сложное, например:

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

Обратите внимание, что приведенный выше код является быстрым и грязным взломом. Вы можете развить это дальше, так как я просто проверяю, существует ли / admin / в URL.

без промедления
источник
перед этим просто проверьте, что такое request_uri и измените условие соответствующим образом.
Калян Чакраварти V
3

И если вы поддерживаете балансировщик нагрузки, который передает IP-адрес клиента в заголовке HTTP_X_FORWARDED_FOR, убедитесь, что вы учли это следующим образом:

// 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;
    }
}
Теган Снайдер
источник
Очень полезно для тех, кто использует балансировщик нагрузки AWS Ec2
asherrard
1

Вы можете настроить свою собственную страницу обслуживания и использовать ErrorDocument 503 для отправки страницы обслуживания. Исключите ваш IP-адрес через RewriteCond, чтобы вы могли в любом случае получить доступ к странице и не перенаправляться:

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]

Обратите внимание, что для тестирования может также потребоваться внести в белый список дополнительные услуги, такие как Платежные шлюзы.

Анна Фёлькл
источник