2009-09-08 19 views
9

60'dan fazla sayfalı bir web sitesi (PHP) oluşturdum. Bir yöneticinin web sitesini geçici olarak devre dışı bırakmasını ve bir Bakım Modu sayfasına yönlendirmesini sağlamak için artık bir "Bakım Modunda" özelliği oluşturmam gerektiğini fark ettim (maalesef). Bu sadece bir yönetici olarak giriş yapanların siteyi görüntülemesine izin verir. GördüğümZaten kurulmuş olan web sitesinde "Bakım Modu" nasıl uygulanır

seçenekleri şunlardır:

  1. her PHP sayfasının üstüne yeni bir "include" dosyası ekleyin.

  2. Her sayfada (gezinme sınıfı) gezinme çubuğunu görüntülemek için kullanabileceğiniz bir tane var (
    ). Bu sınıftaki Bakım Modu
    kodunu yazabilirim.

Başka seçeneklerim var mı? İlk seçenek, en verimli gibi görünmüyor ve 2'si sadece kötü programlama gibi görünüyor. Her bir php dosyasına yeni bir dosya eklemenin başka bir yolu var mı?

Teşekkürler!

ps - site henüz

cevap

18

Sen ise bakım modu başka bir sayfaya yönlendirmek için .htaccess kullanabilirsiniz yayılanmadı.

üç çeşitli örnekler:

RewriteEngine On 
RewriteBase/
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111 
RewriteCond %{REQUEST_URI} !^/maintenance\.html$ 
RewriteRule ^(.*)$ http://domain.com/maintenance.html [R=307,L] 

.htaccess “Down For Maintenance” Page Redirect

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REQUEST_URI} !/maintenance.html$ 
RewriteCond %{REMOTE_HOST} !^888\.888\.888\.888 

RewriteRule $ /maintenance.html [R=302,L] 

Redirect to maintenance page during upgrade using .htaccess

# redirect all visitors to alternate site but retain full access for you 
ErrorDocument 403 http://www.alternate-site.com 
Order deny,allow 
Deny from all 
Allow from 99.88.77.66 

Maintenance mode for apache

+1

bazı IP hariç tutabilirsiniz. –

+0

Bu iyi bir hızlı alternatif gibi görünüyor. Daha fazla ölçeklenebilir olabilecek başka yöntemler bulmayı umuyorum, böylece yeni bir yöneticime sahip olduğumda .htaccess dosyasını güncellemem ve IP'lerini girmem gerekmiyor. Belki de kendimden biraz daha ileri gidiyorum? Gelecek yıl için muhtemelen çok fazla yeni yönetici olmayacak. Belki de basit bir .htaccess düzeltmesi uygulamak, gerçekten sağlam yöntemi uygulamanıza gerek kalmadan çalışacaktır. Siz ne düşünüyorsunuz? Şu anda "uygun" şekilde inşa etmek daha mı iyi? Ya da daha karmaşık hale getirmem gerekene kadar kolay yolu mu? – justinl

+0

Bu, tüm yöneticilerin IP adreslerini bilmenizi gerektirir ... – OIS

0

Site üretimi ile ilgili bazı mantıkların merkezileştirilmesi en basit yol olacaktır. Bu şekilde bakım modunu açabilir ve yönetici olmayanları farklı bir sayfaya yönlendirebilirsiniz. Bunu yapmak zor olmayacaktır, zira her yerde patlayan bir kodunuz var, bu yüzden global bir değişkeni kontrol etmek için oturum açma işlevini uzatın (sayfanızda genel bir genel değişkeniniz yoksa) sadece setenv ile .htaccess olarak ayarlayabilirdiniz.

3

auto_prepend_file dize

otomatik ana dosyadan önce çözümlenecek dosyanın adını belirtir. Dosya require() işleviyle çağrılmış gibi eklenmiştir, böylece include_path kullanılır.

Özel değer hiçbiri otomatik olarak ön yüklemeyi devre dışı bırakır.

php.ini de bu set, veya php_flag auto_prepend_file file.php'den

[veya yönerge ile (apache (sanal) konak dosya veya .htaccess?)]

düzenlemek

  • Belki web kök dir dosya veya bir alt klasör içerir koymak gerekir.
  • Sonunda çıkmayı veya ölmeyi hatırlamayı unutmayın.
+1

Ve 'çıkış eklemek olabilir;' yere sonunda çözümlenen olmaktan kod kalanını durdurmak için!. – alex

+0

@alex: evet. İnsanların çıkış hakkında bildiklerini varsaymamalı çünkü sadece 60 sayfalık php var. : Ben – OIS

+1

haha ​​evet teşekkürler. Bu dosyaları çok oluşturmak kolaydır ve gerçekten hala ne yaptığını bilmiyor: auto_prepend_file paylaştığınız için P – justinl

6

Bunun eski bir soru olduğunu biliyorum, ancak bu sayfayı arama yoluyla gelen gelecekteki arama yapanlar için ekliyorum.

Bir PHP yönlendirmesi kullanıyorum. Her sayfanın üst aşağıdaki satırları ekleyin At

: Sitenizin olmak istediğinizde

<?php 
include('PATH/TO/FILE/config.php'); 
if(maintenance == 1) { 
header('Location: http://example.com/maintenance.php'); 
} 
else { 
// do nothing 
} 
?> 

Ve config.php de sadece bu yüzden

$maintenance = 0; // turns maintenance mode off 

gibi bir değişken yapmak bakım modu sadece "0" değerini "1" olarak değiştirir. Bu, tüm site ziyaretçilerinizi bir bakım sayfasına yönlendirir.

Bu kodu sınamaksızın oldukça hızlı yazdım ama işe yaramalı.

+1

Eh, o işe yaramaz, senin başlık kesme işareti yoksundur. Else, aynı fikri düşündüm ama htaccess büyük siteler için daha iyi görünüyor –

+0

config.php ile ilgili tüm bayt kodlarını temizlemeyi unutmayın https://ma.ttias.be/how-to-clear-php-opcache/ –

2

IP Adreslerini belirtmek yerine, aynı zamanda erişim elde edebilirsiniz kendi Tarayıcının User Agent dizenin sonuna üzerine etiketlendi "MyCrazyString" ile

RewriteCond %{HTTP_USER_AGENT} !MyCrazyString 
RewriteCond %{THE_REQUEST} !upgrade\.txt 
RewriteRule .* /upgrade.txt [R=307,L] 

herkes herkes alır .. Bir RewriteCond HTTP_USER_AGENT karşı kontrol edebilir bakım modu sayfası/sitesi.

Yüksek güvenlik gerekmediği sürece, idealdir; Sadece gerçek gerçek sunucu erişimi olan tek kişi dünyanın diğer tarafında uykuda olduğunda DSL'nizi yeniden bağlarsanız, tamamen taşınabilir ve önemli ölçüde yöneticilere dağıtmak için hızlı ve kolay kırılmaz.

; o) Kor

0

sanırım standard Apache expressionsrewrite rules daha anlamak daha kolay bulunmaktadır.

ben dosya /home/coolcmd/site_maintenance_off için /home/coolcmd/site_maintenance_on adlandırmak bakım önce. /.htaccess için

Kod pasajı: Eğer örneklerde de görebileceğiniz gibi

# If file, directory or symlink /home/coolcmd/site_maintenance_on exists, 
# and requested file is not /maintenance.html, 
# and not an admin's IP... 
<If "-e '/home/coolcmd/site_maintenance_on' && %{REQUEST_URI} != '/maintenance.html' && %{REMOTE_ADDR} != '111.111.111.111'"> 
# Generate status code 503 for URL beginning with /, in other words for ANY URL. 
# This is not "the real redirection 3xx". 
Redirect 503 "/" 
# This page handles status code 503. All external resources used by page 
# (for example, maintenance.css), if any, must be added to <if> above. 
ErrorDocument 503 /maintenance.html 
# Maintenance probably will end in 10 minutes. 
Header set Retry-After 600 
</If> 
İlgili konular