我一直在使用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. 網站停機維護
- 5. 如何維護.NET網站?
- 6. ASP.NET網站維護提示
- 7. REST:處理網站維護
- 8. 哪種Publish方法在維護大型網站時最爲有效?
- 9. 維護前幾小時顯示網站維護通知
- 10. 如何實現面向用戶的站點的站點維護功能
- 11. 保護端點方法
- 12. 異步方法調用 - 維護序列
- 13. 如何爲Windows Azure網站實施「正在維護的網站」?
- 14. Neo4j:維護節點計數
- 15. WPF維護鍵盤焦點
- 16. 維護具有活動站點的Yeoman發生器
- 17. 在C#ASP.NET中跨站點維護狀態
- 18. 節點是內部維護網站的正確選擇嗎?
- 19. 從現有的opencart站點刪除慕斯維護頁面
- 20. 如何在asp.net中重定向維護站點
- 21. Java API:跨站點JSESSIONID不在請求之間維護
- 22. 反正有django站點進入維護模式使用面料?
- 23. IIS停止站點顯示維護頁面html
- 24. 易於維護基於數據庫的CMS站點(WordPress ...)?
- 25. 通過RewriteCond激活站點維護-f檢查?
- 26. 在方法和調用者方法中維護變量值
- 27. 維護第三方庫
- 28. 在Asp.Net MVC網站維護狀態
- 29. 維護網站類的最佳實踐
- 30. 維護視頻網站性能
我喜歡這個想法。 +1 – Abinadi 2009-12-03 06:43:19