使用_remap()函數。這允許你做一些非常強大的404錯誤超出通常內置的錯誤 - 例如
- 不同的404消息,取決於用戶是否登錄!
- 額外記錄404錯誤 - 您現在可以看到引薦人對404的影響,從而幫助追蹤錯誤。這包括查看它是否是機器人(例如Google bot) - 或者它是登錄用戶,哪個用戶造成了404(因此您可以聯繫他們獲取更多信息 - 或者如果他們試圖猜測管理路線或其他)
- 忽略某些404錯誤(例如iPhone用戶的precomposed.png錯誤)。
- 允許,如果你有特殊需要一定的控制器來處理自己的404錯誤不同(即允許博客控制器重新路由到例如最新的博客)
把所有的控制器擴展MY_Controller
:
class MY_Controller extends CI_Controller
{
// Remap the 404 error functions
public function _remap($method, $params = array())
{
// Check if the requested route exists
if (method_exists($this, $method))
{
// Method exists - so just continue as normal
return call_user_func_array(array($this, $method), $params);
}
//*** If you reach here you have a 404 error - do whatever you want! ***//
// Set status header to a 404 for SEO
$this->output->set_status_header('404');
// ignore 404 errors for -precomposed.png errors to save my logs and
// stop baby jesus crying
if (! (strpos($_SERVER['REQUEST_URI'], '-precomposed.png')))
{
// This custom 404 log error records as much information as possible
// about the 404. This gives us alot of information to help fix it in
// the future. You can change this as required for your needs
log_message('error', '404: ***METHOD: '.var_export($method, TRUE).' ***PARAMS: '.var_export($params, TRUE).' ***SERVER: '.var_export($_SERVER, TRUE).' ***SESSION: '.var_export($this->session->all_userdata(), TRUE));
}
// Check if user is logged in or not
if ($this->ion_auth->logged_in())
{
// Show 404 page for logged in users
$this->load->view('404_logged_in');
}
else
{
// Show 404 page for people not logged in
$this->load->view('404_normal');
}
}
然後在routes.php
設置你的404的到你的主控制器,到功能不存在 - 即
$route['404'] = "welcome/my_404";
$route['404_override'] = 'welcome/my_404';
但在歡迎NOmy_404()
功能 - 這意味着你的所有404的將通過_remap
功能 - 讓你實現幹,有你的所有404的邏輯在一個地方。
如果您在邏輯中使用show_404()
或只是redirect('my_404')
,那麼它取決於您。如果你使用show_404()
- 那麼只需要修改例外類重定向
class MY_Exceptions extends CI_Exceptions
{
function show_404($page = '', $log_error = TRUE)
{
redirect('my_404');
}
}
可能重複自定義404錯誤頁面創建:http://stackoverflow.com/questions/8422033/codeigniter-2 -1-issue-with-show-404-and-404-override –