Удаление index.php из URL CodeIgniter

По умолчанию CodeIgniter работает с указанием index.php в URL страницы. Часто возникает необходимость убрать упоминание index.php из URL, что легко реализуемо при помощи директив Rewrite в файле .htaccess и небольшой донастройки в файле application/config/config.php.

Rewrite в файле .htaccess

Включаем модуль mod_rewrite, задаем для него перенаправление всех запросов для несуществующих ресурсов на index.php:


      RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php/$1 [L]

Если ваше приложение на базе CodeIgniter расположено не в корневом каталоге домена, укажите в строке RewriteBase / тот каталог, где расположено ваше приложение. Строки
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d

указывают, что правило будет работать только для запросов на ресурсы (файлы или каталоги), которые не существуют в файловой системе.
Строка RewriteRule ^(.*)$ index.php/$1 [L] указывает, что все запросы нужно направить на файл index.php.
Теперь вместо URL /index.php/welcome можно смело использовать /welcome.

Настройка в application/config/config.php

Для того, чтобы вспомогательные функции URL CodeIgniter и системные функции генерировали адреса без index.php нужно в файле application/config/config.php строку $config['index_page'] = "index.php"; заменить на $config['index_page'] = "";

      $config['uri_protocol'] = "PATH_INFO";

UPD: Если не получается сделать по этой инструкции - пишите в комментарии

13 comments:

  1. что то не работает(((

    ReplyDelete
  2. Где именно не работает?

    ReplyDelete
  3. Отлично, быстро отшил индекс пхп
    Спасибо

    ReplyDelete
  4. Спасибо, работает. (CI 2)

    ReplyDelete
  5. Да, у меня чтоот тоже не работает пишет в лог ошибку -
    File does not exist: /var/www/html/ci/pages, refferer http://localhost/ci/index.php/pages/contact
    supercharged@topmail.co.nz

    ReplyDelete
  6. Работает, спасибо огромное!))

    ReplyDelete
  7. в CI 2 скопировал файл .htaccess в root(http://localhost/ci/) и там уже все это записал

    ReplyDelete
  8. Почему то перенаправляет на главную страницу Денвера

    ReplyDelete
  9. первый контроллер без index.php работает, а второй нет выдает ошибку "Not Found

    The requested URL /test was not found on this server." А если написать с index.php например http://localhost/index.php/test то тогда работает.

    ReplyDelete
    Replies
    1. А в роутах всё есть?

      Delete
  10. Все ок. 2.1.4.

    ReplyDelete
  11. А как быть с nginx?

    ReplyDelete
  12. Я думаю стоит упомянуть, что имеется в виду файл, который находится не в папке "application", а тот, который нужно создать самому в корневой папке, где находится "index.php".

    ReplyDelete