Bagaimana cara mengaktifkan flag pemeliharaan versi 1.9 dengan akses admin

14

Karena saya tidak melihat Mode Pemeliharaan di UI versi 1.9 System > Configuration, saya menjatuhkan maintenance.flagfile di root situs. Namun itu juga memblokir akses panel admin saya. Dapatkah seseorang memberi tahu saya cara mempertahankan mode pemeliharaan situs dengan akses admin?

Cory
sumber

Jawaban:

16

Inilah salah satu solusinya:

Buka index.php di root dan tambahkan (ingat untuk mengedit larik 'diizinkan' berisi IP yang Anda ingin dapat mengakses situs);

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

kemudian ganti baris

if (file_exists($maintenanceFile)) {

untuk

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

Sederhana. Sekarang Anda dapat mengakses situs (admin + ujung depan), sementara yang lain melihat mode pemeliharaannya.

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

JasonS
sumber
5

Ada beberapa ekstensi yang melakukan hal itu. Namun mereka masih hanya solusi sementara karena maintenance.flagfungsi masih ada. Untuk menghapusnya, Anda harus secara manual mengedit file 'index.php' yang pada gilirannya dapat menyebabkan masalah dengan peningkatan.

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

Ini adalah bagaimana fungsi 'maintenance.flag' diimplementasikan dalam 'index.php'. Namun karena Anda perlu mengedit 'index.php' Anda juga dapat melakukan sesuatu yang lebih rumit, seperti:

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

Harap dicatat kode di atas adalah hack cepat dan kotor. Anda dapat mengembangkannya lebih lanjut, karena saya baru memeriksa apakah '/ admin /' ada di url.

Segera
sumber
sebelum melakukan ini cukup periksa apa request_uri dan ubah kondisinya.
Kalyan Chakravarthi V
3

Dan jika Anda di belakang penyeimbang beban yang melewati IP klien di header HTTP_X_FORWARDED_FOR pastikan untuk memperhitungkannya seperti ini:

// 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
sumber
Sangat berguna bagi mereka yang menggunakan load balancer AWS Ec2
asherrard
1

Anda dapat mengatur halaman perawatan Anda sendiri dan menggunakan ErrorDocument 503 untuk mengirim halaman pemeliharaan. Kecualikan alamat IP Anda melalui RewriteCond sehingga Anda dapat mengakses halaman itu dan jangan diarahkan:

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]

Harap perhatikan bahwa layanan tambahan mungkin diperlukan untuk memasukkan layanan tambahan seperti Gateway Pembayaran untuk pengujian.

Anna Völkl
sumber