Браузер отправляет запрос на сервер (Apache, так как вы используете mod_rewrite):
GET профиль / редактировать
Apache принимает этот запрос и видит в своих конфигурационных файлах, что вы настроили его для передачи всех запросов через mod_rewrite. Таким образом, он отправляет строку 'profile / edit' в mod_rewrite. Затем Mod_rewrite применяет указанные вами правила, которые затем преобразуют запрос (как я объяснил в моем предыдущем посте) в «index.php / profile / edit». После того как mod_rewrite завершен, Apache продолжает обрабатывать запрос и видит «о, этот парень запрашивает файл index.php». Поэтому он вызывает интерпретатор php, который затем анализирует и выполняет index.php - и получает в качестве аргументов «/ profile / edit». Код php (CI в вашем случае) анализирует эти аргументы и знает, как вызвать нужный модуль в вашем приложении.
Так что, по сути, это способ всегда вызывать index.php, даже если в url не указан index.php. Таким образом, index.php работает как фронт-контроллер: он направляет все запросы в нужное место в вашем приложении.