كيفية تنفيذ "وضع الصيانة" على موقع الويب المنشأ بالفعل

StackOverflow https://stackoverflow.com/questions/1396848

سؤال

لقد قمت ببناء موقع ويب (PHP) مع أكثر من 60 صفحة. لقد أدركت الآن فقط (للأسف) أنه يجب أن أكون قد بنيت في ميزة "في وضع الصيانة" للسماح للمشرف بتعطيل موقع الويب مؤقتًا وتوجيهه إلى صفحة وضع الصيانة. هذا من شأنه أن يسمح فقط لأولئك الذين قاموا بتسجيل الدخول كمسؤول لعرض الموقع.

الخيارات التي أراها هي:

  1. أضف ملفًا جديدًا "تضمين" إلى أعلى كل صفحة PHP.

  2. لدي واحد تشمل يستخدم لعرض شريط التنقل على
    كل صفحة (فئة التنقل). يمكنني كتابة وضع الصيانة
    رمز في هذه الفئة.

هل لدي أي خيارات أخرى؟ لا يبدو الخيار الأول هو الأكثر كفاءة ، ويبدو أن 2nd فقط مثل البرمجة السيئة. هل هناك أي طريقة أخرى أفضل لتضمين ملف جديد على كل ملف PHP واحد؟

شكرًا!

ملاحظة - لم يتم إطلاق الموقع بعد

هل كانت مفيدة؟

المحلول

يمكنك استخدام .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 Maintence" Redirect

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

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

إعادة التوجيه إلى صفحة الصيانة أثناء الترقية باستخدام .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

وضع الصيانة لأباش

نصائح أخرى

أعلم أن هذا سؤال قديم لكنني أضيف هذا للباحثين في المستقبل الذين صادفوا هذه الصفحة عبر البحث.

أنا استخدم إعادة توجيه 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". سيؤدي ذلك إلى إعادة توجيه جميع زوار موقعك إلى صفحة صيانة.

لقد كتبت هذا الرمز بسرعة كبيرة دون اختباره ولكن يجب أن يعمل.

auto_prepend_file سلسلة

يحدد اسم ملف يتم تحليله تلقائيًا قبل الملف الرئيسي. يتم تضمين الملف كما لو كان يطلق عليه مع وظيفة require () ، لذلك يتم استخدام include_path.

القيمة الخاصة لا شيء تعطل تقديم تلقائي.

يمكنك تعيين هذا في php.ini ، أو في ملف مضيف Apache (افتراضي) أو .htaccess مع php_flag auto_prepend_file file.php

أو php_admin_flag (؟)

تعديل

  • ربما يجب ألا تضع ملف Include في جذر الويب الخاص بك أو مجلد فرعي.
  • وتذكر استدعاء الخروج أو الموت في النهاية.

بدلاً من تحديد عناوين IP ، يمكنك أيضًا التحقق من http_user_agent في إعادة كتابة ..

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

يمكن لأي شخص لديه "MyCrazyString" الموسومة في نهاية سلسلة وكيل المستخدم الخاصة بالمتصفح الوصول إلى الوصول ، ويحصل كل شخص آخر على صفحة/موقع وضع الصيانة.

طالما أن الأمان العالي غير مطلوب ، فهو مثالي ؛ سريع وسهل النشر للمستعولين ، المحمولة تمامًا ، والأهم من ذلك ، لن ينكسر إذا قمت بإعادة توصيل DSL عندما يكون الرجل الوحيد مع فِعلي وصول الخادم نائم في الجانب الآخر من العالم.

؛ س) كور

ستكون أبسط طريقة هي مركزية بعض المنطق فيما يتعلق بتوليد الموقع. وبهذه الطريقة ، يمكنك تشغيل وضع الصيانة وإعادة توجيه أي من غير المسؤولين إلى صفحة مختلفة. لن يكون من الصعب القيام بذلك ، حيث أتصور أن لديك بعض التعليمات البرمجية التي تستمر في الظهور في كل مكان ، لذلك فقط تمديد وظيفة تسجيل الدخول للتحقق من متغير عالمي (إذا لم يكن لديك أي متغيرات عالمية مشتركة عبر صفحتك يمكنك فقط تعيينه في .htaccess عبر setenv).

أظن، تعبيرات Apache القياسية من السهل فهمها أكثر من الفهم إعادة كتابة القواعد.

قبل الصيانة ، أعيد تسمية الملف /hom ل /hom.

قصاصة الكود لـ /.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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top