Как реализовать «Режим обслуживания» на уже созданном веб-сайте

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

Возможные варианты:

  1. Добавьте новый файл «include» в начало каждой страницы PHP.

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

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

Благодаря!

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

Вы можете использовать .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] 

Перенаправление на страницу обслуживания во время обновления с помощью .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 

Режим обслуживания для Apache

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

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

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

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

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

вы можете установить это в php.ini или в файле apache (virtual) host или .htaccess с помощью php_flag auto_prepend_file file.php

[или php_admin_flag (?)]

редактировать

  • Возможно, вы не должны помещать файл include в свой корневой каталог или вложенную папку.
  • И не забудьте вызвать exit или умереть в конце.

Вместо указания IP-адресов вы также можете проверить HTTP_USER_AGENT в RewriteCond ..

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

Любой, у кого есть «MyCrazyString», помеченный в конце строки User Agent своего браузера, может получить доступ, все остальные получают страницу / сайт режима обслуживания.

Пока высокая безопасность не требуется, она идеальна; быстро и легко распространять среди админов, полностью переносимые и, что важно, не сломаются, если вы снова подключите свой DSL, когда единственный парень с фактическим доступом к серверу спит на другой стороне мира.

o) Cor

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

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

Перед обслуживанием я переименую файл / home / coolcmd / site_maintenance_off в / home / 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>