Intereting Posts
cURL: просто пытаюсь загрузить страницу Такая же политика происхождения – JavaScript-вызов PHP Вытяните HTML-контент с удаленного веб-сайта и отобразите его на странице php: как добавить нечетный / четный цикл в массив Получение внутреннего текста тегов HTML с использованием регулярных выражений Ошибка: mysqlnd не может подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию Преобразование специального символа (то есть Umlaut), скорее всего, в ascii Как импортировать XML-строку в php DOMDocument Загрузка файла CodeIgniter – как сохранить имя файла и путь? как я могу публиковать внешнюю форму с помощью PHP? PHP CURL Content-Type не установлен Force PHP дождаться завершения действия базы данных перед продолжением Я не могу найти ошибку в моем php-скрипте Где найти «низкую память» и «свободные циклы процессора» вызывает запуск сбора мусора на unset ()? PHPMailer не отправляет CC или BCC

подход для «сайта вниз для обслуживания»

Я использую Joomla, и мне нравится его административное средство, чтобы разместить сайт для обслуживания. Как я видел, все запросы на сайт, если он находится в режиме обслуживания, перенаправляются на одну страницу. Если я хочу добавить свой собственный модуль «сайт вниз для обслуживания» для сайта без Joomla, как мне это сделать? Я использую структуру MVC в PHP, названную Kohana в ее версии 2, которая похожа на Codeigniter. У меня есть класс Router, где я могу контролировать, куда идет определенный адрес. Единственный подход, который я могу думать, – перенаправить каждый запрос на конкретную функцию контроллера, когда сайт не работает, но как это сделать? Я не могу вручную перенаправить все URL-адреса правильно?

Solutions Collecting From Web of "подход для «сайта вниз для обслуживания»"

Kohana 3 : вы можете определить маршрут catch-all в вашем bootstrap.php перед строками Kohana::modules() :

 if (/* check if site is in under maintenance mode */) { Route::set('defaulta', '(<id>)', array('id' => '.*')) ->defaults(array( 'controller' => 'errors', 'action' => 'maintenance', )); } по if (/* check if site is in under maintenance mode */) { Route::set('defaulta', '(<id>)', array('id' => '.*')) ->defaults(array( 'controller' => 'errors', 'action' => 'maintenance', )); } 

Или вы даже можете связаться с просьбой сделать то же самое:

 if (/* check if site is in under maintenance mode */) { echo Request::factory('errors/maintenance') ->execute() ->send_headers() ->response; } 

Kohana 2 : вам нужно будет расширить Controller и обработать отображение страницы «под обслуживание» в конструкторе (но вам нужно убедиться, что все ваши контроллеры расширяют этот класс контроллера вместо ванильного):

 abstract class Custom_Controller extends Controller { public function __construct() { parent::__construct(); if (/* check if site is in under maintenance mode */) { $page = new View('maintenance'); $page->render(TRUE); exit; } } } 

Или вы даже можете использовать систему hook для этого, добавив файл в папку hooks (убедитесь, что вы включили перехваты в config.php ):

 Event::add('system.ready', 'check_maintenance_mode'); function check_maintenance_mode() { if (/* check if site is in under maintenance mode */) { Kohana::config_set('routes', array('_default' => 'errors/maintenance')); } } 

Как вы можете видеть, на самом деле существует много способов сделать вещи в Кохане, потому что это очень гибкая фреймворк PHP 🙂

Взгляните на документацию по маршрутизации. Вы должны иметь возможность использовать регулярное выражение, которое перенаправляет любой uri на определенный контроллер / действие. Осталось только вопрос о том, как включить или отключить это правило.

Вы можете проверить флаг базы данных в общем заголовке (предположительно, у вас есть некоторые общие include, которые подключаются к базе данных и т. Д.), И если флаг установлен, выведите определенную страницу и выйдите (убедитесь, что все обычные вещи очистки например закрытие соединений с базой данных и т. д.)

Вы используете Apache? Добавьте это в ваш .htaccess файл в своем корневом каталоге (или в объявлении vhost для сайта), чтобы перенаправить ВСЕ-запросы на страницу «под обслуживанием»:

Redirect 301 / /maintenace_page.html

Я могу подумать о двух идеях, чтобы это произошло.

  1. Как сказал Ларри, используйте регулярные выражения для перенаправления всех запросов в определенное место. Итак, сначала вы определяете, находился ли сайт в режиме обслуживания (возможно, с использованием флага базы данных или настройки файла конфигурации), тогда, если бы это было так, используйте функцию регулярного выражения маршрутизации для перенаправления всего трафика на одно место.

  2. Вы можете проверить, находился ли сайт в режиме обслуживания в конструкторе каждого контроллера и при необходимости перенаправлялся. Это, вероятно, не самое оптимальное решение, поскольку вы будете повторять один и тот же код для каждого контроллера. Таким образом, даже если это сработает, вам, вероятно, будет лучше с регулярными выражениями.

Маршрутизация в Кохане: http://docs.kohanaphp.com/general/routing

PHP Регулярные выражения: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

Контроллеры в Кохане: http://docs.kohanaphp.com/general/controllers

В index.php укажите константу с именем IN_MAINTENANCE

Создайте обратный вызов, например, в файле hook :

 function in_maintenance() { if(IN_MAINTENANCE) { Router::$controller = 'my_maintenance_controller'; Router::$method = 'index'; } } 

И добавьте его как в событие system.post_routing.

 Event::add('system.post_routing', 'in_maintenance'); 

Когда вы загружаете свой сайт, измените значение IN_MAINENANCE на TRUE, и все запросы будут перенаправлены на вашу страницу обслуживания.

Дополнительную информацию о создании крючка см. В документации Event / Hook .

Другим способом переключения является проверка файла: если он существует, начинается обслуживание, поэтому отключите сайт.

Если это так, вы можете сделать что-либо из перечисленного выше.