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

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

5
задан yretuta 3 December 2009 в 06:28
поделиться

7 ответов

Кохана 3 : Вы можете определить маршрут для приема всей почты домена в вашем 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 */) {
    echo Request::factory('errors/maintenance')
        ->execute()
        ->send_headers()
        ->response;
}

Кохана 2 : You would need to extend Controller and handle the 'under maintenance' page display in the constructor (but you need to make sure all your controllers extend this controller class instead of the vanilla one):

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;
        }
    }
}

Or you can even utilize the hook system to do it, by adding a file in your hooks folder (make sure you enable hooks in your 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'));
    }
}

As you can see, there are actually many ways how to do stuff in Kohana because it's a very flexible PHP framework :)

6
ответ дан 18 December 2019 в 09:07
поделиться

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

9
ответ дан 18 December 2019 в 09:07
поделиться

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

2
ответ дан 18 December 2019 в 09:07
поделиться

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

Redirect 301 / /maintenace_page.html

1
ответ дан 18 December 2019 в 09:07
поделиться

В вашем index.php определите константу с именем IN_MAINTENANCE

Создайте обратный вызов, подобный этому, в файле ловушек :

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

И добавьте его как в систему. post_routing.

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

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

См. Событие / Документация ловушки для получения дополнительной информации о создании ловушки.

0
ответ дан 18 December 2019 в 09:07
поделиться

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

Если да, вы можете сделать что-либо из упомянутых выше .

0
ответ дан 18 December 2019 в 09:07
поделиться

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

  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

0
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: