我一直在使用Joomla,我喜欢它的管理设施,把网站的维护。正如我所看到的,如果网站处于维护模式,对网站的所有请求都会路由到单个页面。如果我想为非Joomla网站添加我自己的“维护站点”模块,我该怎么做?我在PHP中使用名为Kohana的MVC框架,其版本2与Codeigniter类似。我有一个路由器类,我可以控制某个地址去哪里。我能想到的唯一方法是在站点关闭时将每个请求重定向到特定的控制器功能,但我该怎么做?我无法手动重新路由所有的URL?方法为“站点维护”
回答
的Kohana 3: 您可以Kohana::modules()
行之前定义你的bootstrap.php
一个包罗万象的路线:
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
并处理'under maintenanc E”在构造页面显示(但你需要确保所有的控制器的香草之一,而不是扩展这个控制器类):通过添加
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框架:)
你可以在一个通用头文件中检查一个数据库标志(大概你有一些常用的包含连接数据库的东西等等),并且如果该标志被设置,则渲染一个特定的页面并退出(确保全部完成通常的清理工作就像关闭数据库连接等)。
看看路由documentation。您应该能够使用正则表达式将任何uri重定向到特定的控制器/操作。剩下的唯一问题就是如何打开/关闭该规则。
我可以想出两个想法来实现这一点。
像拉里说的那样,使用正则表达式将所有请求重定向到特定位置。因此,首先确定站点是否处于维护模式(可能使用数据库标志或配置文件设置),如果是,则使用路由的正则表达式功能将所有流量重定向到一个位置。
您可以检查网站是否处于维护模式,在每个控制器的构造函数中并根据需要重定向。这可能不是最优化的解决方案,因为您将为每个控制器重复相同的代码。所以,即使它能起作用,用正则表达式也许会更好。
路由中的Kohana:http://docs.kohanaphp.com/general/routing
PHP正则表达式:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
控制器中的Kohana:http://docs.kohanaphp.com/general/controllers
你运行的是Apache?在Web根目录添加到您的.htaccess
文件(或虚拟主机声明的网站)重定向所有请求到“正在维护”页面:
Redirect 301//maintenace_page.html
在你的index.php定义一个名为恒IN_MAINTENANCE
在hook file创建像这样的回调:
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 documentation。
切换此方法的另一种方法是检查文件:如果存在,则开始维护,因此请关闭网站。
如果是这样,你可以做任何上述的事情。
- 1. 以编程方式维护站点地图
- 2. 如何为网站维护文档?
- 3. 建立网站最快,维护成本最低的方法?
- 4. REST:处理网站维护
- 5. 如何维护.NET网站?
- 6. ASP.NET网站维护提示
- 7. 网站停机维护
- 8. 哪种Publish方法在维护大型网站时最为有效?
- 9. 维护前几小时显示网站维护通知
- 10. 如何实现面向用户的站点的站点维护功能
- 11. 保护端点方法
- 12. 如何为Windows Azure网站实施“正在维护的网站”?
- 13. Neo4j:维护节点计数
- 14. WPF维护键盘焦点
- 15. 如何跨站点维护一个全局变量..
- 16. 从现有的opencart站点删除慕斯维护页面
- 17. 在C#ASP.NET中跨站点维护状态
- 18. 反正有django站点进入维护模式使用面料?
- 19. 易于维护基于数据库的CMS站点(WordPress ...)?
- 20. IIS停止站点显示维护页面html
- 21. 通过RewriteCond激活站点维护-f检查?
- 22. Java API:跨站点JSESSIONID不在请求之间维护
- 23. 维护第三方库
- 24. 将“网站维护”分页SEO?
- 25. ASP.MVC2.0/EF4.0网站部署/维护
- 26. 网站维护登陆页面
- 27. 将网站置于维护模式?
- 28. 维护视频网站性能
- 29. 维护网站类的最佳实践
- 30. 在Asp.Net MVC网站维护状态
我喜欢这个想法。 +1 – Abinadi 2009-12-03 06:43:19