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

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

Вопрос

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

Варианты, которые я вижу, следующие:

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

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

Есть ли у меня какие-либо другие варианты?1-й вариант не кажется самым эффективным, а 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
}
?>

И в вашем файле config.php просто создайте переменную примерно так

$maintenance = 0; // turns maintenance mode off

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

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

авто_репенд_файл строка

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

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

вы можете установить это в php.ini, или в файле apache (виртуального) хоста, или в файле .htaccess с php_flag auto_prepend_file file.php

[или php_admin_flag (?)]

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

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

Вместо того, чтобы указывать 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 их легче понять , чем переписать правила.

Перед обслуживанием я переименовываю файл /главная страница/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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top