我一直在使用Joomla,我喜欢它的管理设施,以便放下网站进行维护.正如我所看到的,如果站点处于维护模式,对站点的所有请求都将路由到单个页面.如果我想为非Joomla网站添加我自己的"网站维护"模块,我该怎么做?我在PHP中使用了一个名为Kohana的MVC框架,其版本2与Codeigniter类似.我有一个Router类,我可以控制某个地址的位置.我能想到的唯一方法是在站点关闭时将每个请求重定向到特定的控制器功能,但是我该怎么做?我不可能手动重新路由所有网址吗?
看一下路由文档.您应该能够使用将任何uri重定向到特定控制器/操作的正则表达式.剩下的唯一问题是如何打开/关闭该规则.
Kohana的3:您可以定义在一个包罗万象的路线bootstrap.php
的前Kohana::modules()
行:
if (/* check if site is in under maintenance mode */) { Route::set('defaulta', '()', 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
和处理构造函数中的"维护不足"页面显示(但您需要确保所有控制器都扩展此控制器类而不是vanilla类):
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; } } }
或者您甚至可以通过在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')); } }
正如您所看到的,实际上有很多方法可以在Kohana中进行操作,因为它是一个非常灵活的PHP框架:)