2011-09-23 90 views
7

如果我想捕獲每個單獨的不存在傳遞到我的Web應用程序併爲它們提供視圖但不提供404的URL,我該怎麼做?捕獲所有控制器/路線

本質上我需要記錄基於這些命中的統計數據,但我需要通過提供內容而不是404錯誤來完成。

至於我可以告訴application/config/routes.php,我可以用

$route['default_controller'] = 'catchall'; 

,但我需要爲我的實際Web應用程序。

我還可以使用

$route['404_override'] = 'catchall'; 

,但我不想拋出404。

我嘗試使用

$route['(:any)'] = '$1'; 

但我需要記錄整個URL(例如段的任何長度),而不僅僅是第一分段。

回答

6

使用$route['(:any)'] = 'catchall_controller'。然後在您的控制器中,您可以使用$this->uri->segment(n)訪問URI段。

+3

我想知道爲什麼這是選擇的答案,這將所有有效的URL也傳遞給catchall控制器。 –

+0

@ClainDsilva如果這條路線放在最後。當有人試圖重組路線文件時,它仍然需要評論。 – Goose

0

我不知道codeigniter和普通PHP之間的區別,但是,在普通的php中,您可以編輯htaccess或任何來定義自定義404頁面。

在自定義404頁面中,執行類似下面的操作: $ requested = $ _ SERVER ['REQUEST_URI'];

獲得其請求的URL ....做你的處理......和這樣做是爲了清除404:

標題( 「HTTP/1.1 200 OK」); 標題(「狀態:200 OK」);

然後,包括你的html或任何你想要的服務。

+0

希望您現在瞭解Codeigniter。 –

1

您是否嘗試過爲不同數量的細分添加多個捕獲所有路線?

$route['(:any)'] = '$1'; 
$route['(:any)/(:any)'] = '$1/$2'; 
$route['(:any)/(:any)/(:any)'] = '$1/$2/$3'; 

我猜這會工作,但可能有一個更優雅的方式來做到這一點。

+0

'(。+)'怎麼樣? –