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

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

Я вижу следующие варианты:

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

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

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

Спасибо!

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


person justinl    schedule 08.09.2009    source источник


Ответы (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 "Down For Maintenance" Перенаправление страницы

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

person Luis Melgratti    schedule 08.09.2009
comment
Как видно из примеров, некоторые IP-адреса можно исключить. - person Luis Melgratti; 09.09.2009
comment
Это выглядит как хорошая быстрая альтернатива. Я надеюсь найти другие методы, которые могут быть более масштабируемыми, чтобы каждый раз, когда у меня будет новый администратор, мне не нужно было обновлять файл .htaccess и вводить его IP-адрес. Хотя, может быть, я немного забегаю вперед? В следующем году у меня, вероятно, не будет очень много новых админов. Возможно, реализация простого быстрого исправления .htaccess на данный момент будет работать, пока мне действительно не понадобится реализовать надежный метод. Что вы ребята думаете? Не лучше ли построить его правильно прямо сейчас? Или просто делать простой способ, пока мне не нужно сделать его более сложным? - person justinl; 09.09.2009
comment
Из всех вариантов я бы сказал, что это лучшее направление. Это дает вам максимальную гибкость и контроль над всем сайтом. - person Dooltaz; 09.09.2009
comment
Ну, это звучит как лучшее решение на данный момент, пока мне действительно не нужно построить что-то сложное, учитывая, что это займет у меня всего несколько минут. - person justinl; 09.09.2009
comment
Кстати, если кто-то еще использует этот метод, вам нужно будет добавить строку в файл .htaccess, чтобы разрешить любые внешние файлы css. Чтобы разрешить все файлы css, используйте это: %{REQUEST_URI} !.css$ - person justinl; 09.09.2009
comment
@justinnl Можете ли вы немного подробнее описать, как вставить (как условие требования?) %{REQUEST_URI} !.css$? Вы используете 1-ю ссылку или 2-ю ссылку в ответе? - person Shackrock; 05.08.2012
comment
Чтобы это работало для PHP, вам нужно добавить этот код: RewriteCond %{REQUEST_URI} !.php$ - person mimi; 02.09.2017

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

Я использую перенаправление 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». Это перенаправит всех посетителей вашего сайта на страницу обслуживания.

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

person Jesse Toxik    schedule 10.06.2013
comment
Ну, это не сработает, в вашем заголовке не хватает апострофа. Еще я думал о той же идее, но htaccess выглядит намного лучше для больших сайтов. - person Sachin Kanungo; 26.08.2015
comment
Не забудьте очистить все байт-коды, связанные с config.php ma.ttias.be/how -to-clear-php-opcache - person Roger Gusmao; 12.05.2017
comment
почему бы просто не поместить заголовок ('..') в файл конфигурации? - person yusufmalikul; 24.08.2019

auto_prepend_file

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

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

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

[или php_admin_flag (?)]

изменить

  • Возможно, вам не следует помещать включаемый файл в корневой веб-каталог или вложенную папку.
  • И не забудьте вызвать exit or die в конце.
person OIS    schedule 08.09.2009
comment
И вы можете добавить exit; где-нибудь в конце, чтобы остальная часть вашего кода не анализировалась. - person alex; 09.09.2009
comment
@алекс: да. не следует предполагать, что люди знают о выходе только потому, что они получили более 60 страниц php. :Я - person OIS; 09.09.2009
comment
хаха да спасибо. Легко создать много файлов и не знать, что вы делаете: P - person justinl; 09.09.2009
comment
Спасибо OIS за то, что поделились информацией о файле auto_prepend_file. Я не знал об этом, и я уверен, что это пригодится позже. :) - person justinl; 09.09.2009

Вместо того, чтобы указывать IP-адреса, вы также можете проверить HTTP_USER_AGENT в RewriteCond..

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

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

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

;о) Кор

person Cor    schedule 02.12.2013

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

person Miha Hribar    schedule 08.09.2009

Я думаю, стандартные выражения 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>
person CoolCmd    schedule 25.04.2015