2009-09-08 20 views
9

पर "रखरखाव मोड" को कार्यान्वित करने के लिए मैंने 60 से अधिक पृष्ठों के साथ एक वेबसाइट (PHP) बनाई है। मुझे अभी केवल एहसास हुआ है (दुर्भाग्यवश) कि मुझे "रखरखाव मोड" सुविधा में बनाया जाना चाहिए ताकि व्यवस्थापक को अस्थायी रूप से वेबसाइट को अक्षम कर दिया जा सके और उसे रखरखाव मोड पृष्ठ पर इंगित किया जा सके। यह केवल वेबसाइट देखने के लिए व्यवस्थापक के रूप में लॉग इन करने की अनुमति देगा।पहले से स्थापित वेबसाइट

विकल्प मैं देख रहा हूँ कर रहे हैं:

  1. हर एक पीएचपी पृष्ठ के शीर्ष पर एक नया "शामिल हैं" फ़ाइल जोड़ें।

  2. मेरे पास एक ऐसा शामिल है जिसका उपयोग नेविगेशन बार को
    प्रत्येक पृष्ठ (नेविगेशन क्लास) पर प्रदर्शित करने के लिए किया जाता है। मैं इस वर्ग में रखरखाव मोड
    कोड लिख सकता हूं।

क्या मेरे पास कोई अन्य विकल्प है? पहला विकल्प सबसे कुशल की तरह प्रतीत नहीं होता है, और दूसरा एक खराब प्रोग्रामिंग जैसा लगता है। क्या प्रत्येक एकल php फ़ाइल पर एक नई फ़ाइल शामिल करने का कोई और बेहतर तरीका है?

धन्यवाद!

ps - साइट शुरू की अभी तक

उत्तर

18

आप .htaccess उपयोग कर सकते हैं, जबकि रखरखाव मोड के किसी दूसरे पृष्ठ पुन: निर्देशित नहीं कर रहा है।

तीन मिश्रित उदाहरण:

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

आप उदाहरण में देख सकते हैं आप कुछ आईपी बाहर कर सकते हैं। –

+0

यह एक अच्छा त्वरित विकल्प की तरह दिखता है। मैं अन्य विधियों को ढूंढने की उम्मीद कर रहा हूं जो अधिक स्केलेबल हो सकते हैं ताकि प्रत्येक बार जब मेरा कोई नया व्यवस्थापक हो, तो मुझे .htaccess फ़ाइल को अपडेट करने और अपने आईपी में प्रवेश करने की आवश्यकता नहीं है। शायद मैं अपने आप से थोड़ा आगे हो रहा हूँ हालांकि? अगले वर्ष के लिए शायद मेरे पास बहुत से नए व्यवस्थापक नहीं होंगे। शायद अब तक एक सरल त्वरित। Htaccess फिक्स को कार्यान्वित करना तब तक काम करेगा जब तक कि मुझे वास्तव में मजबूत विधि को लागू करने की आवश्यकता न हो। आप लोग क्या सोचते हैं? क्या इसे अभी "उचित" तरीके से बनाना बेहतर है? या बस इतना आसान तरीका है जब तक कि मुझे इसे और अधिक जटिल बनाने की आवश्यकता न हो? – justinl

+0

यह आपको सभी व्यवस्थापक के आईपी पते जानने की आवश्यकता है ... – OIS

0

साइट पीढ़ी के बारे में कुछ तर्कों को केंद्रीकृत करना सबसे आसान तरीका होगा। इस तरह आप रखरखाव मोड को चालू कर सकते हैं और किसी भी गैर-व्यवस्थापक को किसी दूसरे पृष्ठ पर रीडायरेक्ट कर सकते हैं। ऐसा करना मुश्किल नहीं होगा, क्योंकि मुझे लगता है कि आपके पास कुछ कोड है जो पूरे स्थान पर पॉप-अप रहता है, इसलिए वैश्विक चर की जांच करने के लिए केवल लॉगिन कार्यक्षमता का विस्तार करें (यदि आपके पृष्ठ पर कोई सामान्य वैश्विक चर नहीं है आप इसे setenv के माध्यम से .htaccess में बस सेट कर सकते हैं)।

3

auto_prepend_file स्ट्रिंग

एक फ़ाइल है कि स्वचालित रूप से मुख्य फ़ाइल से पहले पार्स किया गया है के नाम निर्दिष्ट करता है। फ़ाइल को शामिल किया गया है जैसे कि इसे आवश्यकता() फ़ंक्शन के साथ बुलाया गया था, इसलिए include_path का उपयोग किया जाता है।

विशेष मूल्य कोई भी ऑटो-प्रीपेडिंग को अक्षम नहीं करता है।

आप php.ini में इस सेट कर सकते हैं, या अपाचे (आभासी) मेजबान फ़ाइल या php_flag auto_prepend_file file.php

[या php_admin_flag (साथ .htaccess में?)]

संपादित

  • शायद तुम नहीं जिनमें आप वेब जड़ dir में फ़ाइल या एक उप फ़ोल्डर में शामिल करना चाहिए।
  • और अंत में बाहर निकलने या मरने के लिए याद रखें।
+1

और आप अपने शेष कोड को पार्स होने से रोकने के लिए अंत में कहीं भी' बाहर निकलें 'जोड़ सकते हैं। – alex

+0

@alex: हाँ। लोगों को बाहर निकलने के बारे में नहीं पता होना चाहिए क्योंकि उन्हें 60+ पृष्ठ php मिल गया है। : मैं – OIS

+1

हाहा हां धन्यवाद। बहुत सारी फाइलें बनाना आसान है और वास्तव में नहीं जानते कि आप अभी क्या कर रहे हैं: पी – justinl

6

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं इसे भविष्य के खोजकर्ताओं के लिए जोड़ रहा हूं जो इस पृष्ठ पर खोज के माध्यम से आते हैं।

मैं एक PHP रीडायरेक्ट का उपयोग करता हूं।

जोड़ने निम्नलिखित लाइनों हर पृष्ठ के शीर्ष पर: जब आप अपनी साइट में रहना चाहता हूँ

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

और अपने config.php फाइल में सिर्फ इसलिए

$maintenance = 0; // turns maintenance mode off 

की तरह एक चर बनाने रखरखाव मोड सिर्फ "0" को "1" में बदल देता है। यह आपके सभी साइट आगंतुकों को रखरखाव पृष्ठ पर रीडायरेक्ट करेगा।

मैंने उस कोड को परीक्षण किए बिना बहुत तेज़ टाइप किया लेकिन इसे काम करना चाहिए।

+1

अच्छा, यह काम नहीं करेगा, आपके शीर्षलेख में एस्ट्रोफ़े की कमी है। अन्यथा, मैंने एक ही विचार के बारे में सोचा लेकिन एचटीएसीएसी बड़ी साइटों के लिए कहीं बेहतर दिखता है –

+0

config.php https://ma.ttias.be/how-to-clear-php-opcache/ से संबंधित सभी बाइटकोड को साफ़ करना याद रखें। –

2

बजाय आईपी पते निर्दिष्ट करते हैं, आप भी HTTP_USER_AGENT के खिलाफ एक RewriteCond में जांच कर सकता है ..

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

"MyCrazyString" अपने ब्राउज़र की उपयोगकर्ता एजेंट स्ट्रिंग के अंत पर टैग किए गए उपयोग कर सकते हैं के साथ कोई भी, बाकी सब हो जाता है रखरखाव मोड पेज/साइट।

जब तक उच्च सुरक्षा की आवश्यकता नहीं है, यह आदर्श है; व्यवस्थापक, पूरी तरह से पोर्टेबल, और महत्वपूर्ण रूप से प्रसारित करने में तेज़ी से और आसान, यदि आप अपने डीएसएल को दोबारा जोड़ते हैं तो ब्रेक नहीं होगा जब वास्तविक सर्वर एक्सेस के साथ एकमात्र लड़का दुनिया के दूसरी तरफ सो जाता है।

; ओ) कोर

0

मुझे लगता है, standard Apache expressionsrewrite rules से समझने के लिए और अधिक आसानी से कर रहे हैं।

रखरखाव इससे पहले कि मैं नाम बदलने फ़ाइल /घर/coolcmd/site_maintenance_off को /घर/coolcmd/site_maintenance_on। /.htaccess के लिए

कोड स्निपेट:

# 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> 
संबंधित मुद्दे