Я создал сайт (PHP) с более чем 60 страницами. Я только сейчас понял (к сожалению), что должен был встроить функцию «В режиме обслуживания», чтобы администратор мог временно отключить веб-сайт и указать его на страницу режима обслуживания. Это позволит только зарегистрированным пользователям просматривать веб-сайт.
Возможные варианты:
Добавьте новый файл «include» в начало каждой страницы PHP.
У меня есть один, который используется для отображения навигационной панели на
каждая страница (класс навигации). Я мог бы написать режим обслуживания
кода в этом классе.
Есть ли у меня другие варианты? Первый вариант не кажется наиболее эффективным, а второй – просто плохим программированием. Есть ли другой лучший способ включить новый файл в каждый файл 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 (?)]
редактировать
Вместо указания 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>