Как удалить "index.php" в пути codeigniter - PullRequest
114 голосов
/ 18 сентября 2009

Как мне удалить "index.php" торчащий в каждом пути в codeigniter где-нибудь в центре? Я хочу чистить не index.php-fied URLs?

Ответы [ 26 ]

89 голосов
/ 18 сентября 2009

Если вы используете Apache, поместите файл .htaccess в ваш корневой веб-каталог, содержащий следующее:

RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Другая хорошая версия находится здесь:

http://snipplr.com/view/5966/codeigniter-htaccess/

60 голосов
/ 28 октября 2011

У меня были большие проблемы с удалением index.php. Как правило, приведенный ниже .htaccess был протестирован на нескольких серверах и обычно работает:

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

<Files "index.php">
AcceptPathInfo On
</Files>  

Если вам не повезло с этим, то следующий шаг - настроить ваш конфигурационный файл. Попробуйте некоторые другие протоколы URI, например,

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

   $config['uri_protocol']  = 'ORIG_PATH_INFO';

Если вам все еще не повезло, попробуйте изменить правило перезаписи, включив в него подпапку. Это часто проблема, если вы используете временный URL на сервере разработки и т. Д .:

RewriteRule ^(.*)$ /subofolder1/subfolder2/index.php/$1 [L]  

Просто поиграйте с этими опциями, надо работать. Также убедитесь, что для вашего индексного файла установлено значение:

$config['index_page'] = '';

Удачи!

31 голосов
/ 08 сентября 2012

Файл .htaccess находится в корневом каталоге приложения вместе с файлом index.php. (Проверьте правильность расширения htaccess, у меня не работает bz htaccess.txt.)

И добавьте следующие правила в файл .htaccess,

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

Затем найдите следующую строку в файле application / config / config.php

$config['index_page'] = 'index.php';

Установите переменную пустой, как показано ниже.

$config['index_page'] = '';

Вот и все, у меня это сработало.

Если это больше не работает, попробуйте заменить следующие переменные этими параметрами ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' и 'ORIG_PATH_INFO') по одному

$config['uri_protocol'] = 'AUTO';
21 голосов
/ 18 сентября 2009

Посмотрите в файле system\application\config\config.php, есть переменная с именем index_page

Это должно выглядеть так

$config['index_page'] = "index.php";

изменить на

$config['index_page'] = "";

Тогда, как уже упоминалось, вам также нужно добавить правило перезаписи в .htaccess файл

Примечание: в CodeIgniter v2 этот файл был перемещен из системной папки в application\config\config.php

9 голосов
/ 19 июля 2012

Все вышеперечисленные методы потерпели неудачу для меня, и затем я обнаружил, что не меняю AllowOverride None на AllowOverride All в моем файле виртуального хоста по адресу / etc / apache2 / sites -Доступно / по умолчанию

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All    <---- replace None with All
    </Directory>
    <Directory /var/www >
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All   <---  replace None with All
            Order allow,deny
            allow from all
    </Directory>

     ...

6 голосов
/ 04 сентября 2014

Шаг 1 => Поместите файл .htaccess в корневую папку, где существуют папки приложения и системы.

Шаг 2 => Если ваш веб-путь использует подпапку, например - yourdomain.com/project/, - используйте следующий код в файле htaccess

RewriteEngine on
RewriteBase    /project/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /project/index.php/$1 [L]

Если ваш веб-путь использует корневую папку, например - yourdomain.com, - используйте следующий код в файле htaccess

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
6 голосов
/ 21 января 2013
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

после изменения RewriteRule. * Index.php / $ 0 [PT, L] с именем папки проекта "codeigniter" .it работает на меня. Спасибо, ребята, за вашу поддержку.

5 голосов
/ 15 ноября 2012
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

Это определенно должно сработать .. попробуйте

5 голосов
/ 06 января 2012

Просто подумал, что могу добавить

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

будет .htaccess и обязательно отредактируйте переменную application / config.php следующим образом:

заменить

$config['uri_protocol'] = “AUTO” 

с

$config['uri_protocol'] = “REQUEST_URI”
4 голосов
/ 29 апреля 2013

Убедитесь, что вы включили mod_rewrite (я не сделал).
Для включения:

sudo a2enmod rewrite  

Также замените AllowOverride None на AllowOverride All

sudo gedit /etc/apache2/sites-available/default  

Окончательно ...

sudo /etc/init.d/apache2 restart  

Мой .htaccess -

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
...