الكود يعمل بدون اي مشكلة اخي الفاضل
جميل جداً,
ولكنك ستواجه مشكلة وهي انك سوف تضطر ان تستدعي هذا الفنكشن في كل صفحاتك !!
حسناً كما ذكرت من قبل .. الموضوع سهل جداً مع CI 
انشئ ملف جديد بداخل مجلد application/libraries
وقم بتسميته : no_index.php
ثم ضع هذا المحتوى بداخله :
كود PHP:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class No_index{
function No_index(){
if( ! isset($_SERVER['REQUEST_URI'])) return;
$request_segments = explode('/', $_SERVER['REQUEST_URI']);
if(isset($request_segments[2]) && $request_segments[2] == SELF)
{
show_404();
}
}
}
?>
الآن اصبح لدينا مكتبة وظيفتها ان تقوم بإظهار الخطأ 404 اذا كان الرابط يحتوي على اسم الملف index.php
الآن ايضاً نفس المشكلة ستواجهها وهي .. انك ستضطر ان تستدعي المكتبة في كل ملفاتك!
بصراحة الموضوع اسهل مما تتصور 
قم بوضع اسم المكتبة "no_index" في قائمة الإستدعاء الآلي للمكتبات في ملف config/autoload.php
وبالضبط في السطر :
كود PHP:
$autoload['libraries'] = array('');
انتهى
ارق التحية