Как реализовать "режим обслуживания" на уже установленном сайте

Я создал веб-сайт (PHP) с более чем 60 страницами. Я только сейчас понял (к сожалению), что я должен был встроить функцию "в режиме обслуживания", чтобы позволить администратору временно отключить веб-сайт и указать его на страницу режима обслуживания. Это позволит только тем, кто вошел в систему как администратор, просматривать веб-сайт.

варианты, которые я вижу:

  1. добавьте новый файл" include " в верхнюю часть каждого PHP страница.

  2. У меня есть один, который используется для отображения панели навигации на
    каждая страница (класс навигации). Я мог бы написать режим обслуживания
    код в этом классе.

есть ли у меня другие варианты? 1-й вариант не кажется наиболее эффективным, а 2-й просто кажется плохим программированием. Есть ли другой лучший способ включить новый файл в каждый файл php?

спасибо!

ps - сайт еще не запущен

6 ответов


можно использовать .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" вниз для обслуживания " перенаправление страницы

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

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

перенаправление на страницу обслуживания во время обновления.реврайт

# 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

режим обслуживания для apache


Я знаю, что это старый вопрос, но я добавляю это для будущих поисковиков, которые сталкиваются с этой страницей через поиск.

Я использую перенаправление PHP.

в верхней части каждой страницы добавьте следующие строки:

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

и в вашей конфигурации.php файл просто сделать переменную, как так

$maintenance = 0; // turns maintenance mode off

Если вы хотите, чтобы ваш сайт был в режиме обслуживания просто измените "0" на "1". Это перенаправит всех посетителей вашего сайта на обслуживание страница.

Я набрал этот код довольно быстро, не тестируя его, но он должен работать.


auto_prepend_file строка

указывает имя файла, который автоматически анализируется перед основным файлом. Файл включен, как если бы он был вызван с помощью функции require (), поэтому используется include_path.

специальное значение none отключает автоматическое добавление.

вы можете установить это в PHP.ini, или в файле хоста apache (virtual) или .htaccess с файлом php_flag auto_prepend_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 когда единственный парень с фактический доступ к серверу спит на другой стороне мира.

; o) Cor


самым простым способом было бы централизовать некоторую логику относительно генерации сайта. Таким образом, вы можете включить режим обслуживания и перенаправить всех не администраторов на другую страницу. Это было бы нетрудно сделать, так как я предполагаю, что у вас есть код, который постоянно появляется повсюду, поэтому просто расширьте функциональность входа, чтобы проверить глобальную переменную (если у вас нет общих глобальных переменных на Вашей странице, вы можете просто установить ее .htaccess через setenv).


Я думаю, стандартные выражения Apache легче понять, чем правил.

перед обслуживанием переименовываю файл / home/coolcmd / site_maintenance_off to / home/coolcmd / site_maintenance_on.

фрагмент кода для /.реврайт:

# 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>