Как удалить index.php в пути codeigniter

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


person OrangeRind    schedule 18.09.2009    source источник
comment
formget.com/codeigniter-htaccess-remove-index-php   -  person Eldho NewAge    schedule 17.04.2018


Ответы (26)


Если вы используете 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/

person Sean Vieira    schedule 18.09.2009
comment
+1 за ссылку! Хотя пришлось немного подправить. получил это --› RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [QSA,L] - person OrangeRind; 18.09.2009
comment
по какой-то причине мне пришлось добавить косую черту в начало RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt) - person Henry; 08.09.2013
comment
По какой-то причине, если у вас есть index.php в URL-адресе, он на самом деле не удаляется, он остается там и продолжает работать. - person CMCDragonkai; 03.12.2013
comment
Я использовал все возможные комбинации, и это все еще не работает для меня!!!!! как ты заставил его работать?? - person Roshdy; 10.01.2015
comment
Ваша установка Apache должна быть настроена для проверки файлов .htaccess — убедитесь, что это так. - person Sean Vieira; 10.01.2015

У меня были большие проблемы с удалением 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'] = '';

Удачи!

person jimbo2087    schedule 28.10.2011
comment
я думал, что ваш первый код здесь был решением для меня, но на самом деле он просто отправляет любой URL-адрес, например domain/*, в domain/index.php, он не отправляет домен/добро пожаловать в контроллер приветствия. был взволнован на секунду тогда. попробуйте другие предложения сейчас. - person jsky; 14.08.2013

Поместите файл .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';
person Shaolin    schedule 08.09.2012
comment
спасибо, я долгое время терпел неудачу, не знаю почему, но твой способ работал как масло: D - person Ahmed Samy; 27.11.2012
comment
Спасибо MDeSilva. Этот пост сэкономил мне время. - person sanji; 03.04.2013
comment
Спасибо. Это работает. Кстати, мне не нужно менять config.php. - person Stony; 25.10.2013
comment
Спасибо, это помогло мне, я использовал PATH_INFO с WAMP - person T.Coutlakis; 25.01.2014

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

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

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

изменить его на

$config['index_page'] = "";

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

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

person Re0sless    schedule 18.09.2009

Все вышеперечисленные методы не помогли мне, и затем я обнаружил, что не меняю 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>

     ...

person waqas    schedule 18.07.2012
comment
Большое спасибо, я тоже получил этот AllowOverride None, теперь он работает! - person Willy; 24.08.2012
comment
Блога уже нет, и мне бы очень хотелось его прочитать. Ни одно из этих решений не работает для меня... - person Kevin Beal; 23.11.2012
comment
круто, спас мой день. - person JChow; 14.06.2014

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

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

person Captain Sparrow    schedule 21.01.2013

Шаг 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]
person vinod    schedule 04.09.2014
comment
Попытка использования первого из приведенных выше примеров работает только с моим корнем, но не с загрузкой формы и т. д., я все равно попытаюсь использовать index.php в URL-адресах. Я поиграюсь и вернусь к этому, если смогу это исправить. - person Sam; 19.03.2015
comment
Спасибо @Vinod. Я сходил с ума от этой проблемы. Я так долго искал в сети, пробовал различные решения, но они никогда не работали, пока я не наткнулся на ваше решение. Теперь мой проект CI работает, и это дало мне НОВУЮ НАДЕЖДУ. чтобы двигаться дальше с CI. Большое спасибо :) - person gomesh munda; 01.02.2017

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

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”
person Jefkine Kafunah    schedule 06.01.2012

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

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

person Ramaraju.d    schedule 15.11.2012

Убедитесь, что вы включили 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]  
person miguelitomp    schedule 29.04.2013
comment
Еще один модуль, который мне нужно было включить, был actions: «как заставить файлы htaccess работать с виртуальным хостом apache»> stackoverflow.com/questions/14419757/ - person Jasdeep Khalsa; 22.06.2013

Идеальное решение [проверено как на локальном хосте, так и на реальном домене]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 
person Abhishek Goel    schedule 10.06.2014

Это .htaccess для одного из моих проектов CI:

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

Последняя строка должна дать вам то, что вам нужно, хотя вам может понадобиться или не понадобиться '/projectFolder' в зависимости от того, как настроена структура вашей папки. Удачи!

person Matthew Rapati    schedule 18.09.2009

Используйте mod_rewrite в соответствии с инструкциями в этом руководстве на вики-сайте CI.

person Ben S    schedule 18.09.2009

В качестве файла .htaccess рекомендуется использовать файл, предоставляемый Kohana Framework:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Это хорошо продуманный .htaccess, который просто работает.

person laurent    schedule 11.10.2013

Есть два способа решить index.php в URL-адресе для codeigniter.

1: В config/config.php изменить код:

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

to

$config['index_page'] = '';

2: Создайте .htacess в корневом каталоге, если он не создан, скопируйте следующий код: -

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

Сохраните его, а затем проверьте в своей конфигурации Apache rewrite_module ИЛИ mod_rewrite включен. Если нет, пожалуйста, включите. (Лучший подход)!

person Community    schedule 06.11.2016
comment
Это правильно и прямо из документов CodeIgniter. Я также использую этот метод. - person Dewald Els; 30.01.2017

Я тестировал это на apache2 на разных хостингах, и он отлично работает.

используйте этот htaccess

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

убедитесь, что у вас есть enabled mod_rewirte с phpinfo();

затем сделайте это в config/config.php:

$config['index_url']    = '';
|
| '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'] = 'AUTO';

если это еще не работает, попробуйте изменить $config['uri_protocol']='AUTO' на один из перечисленных внутри файла application/config/config.php в строке 40/54:

иногда я использовал: REQUEST_URI вместо AUTO или "QUERY_STRING" для хостингов goDaddy

person Community    schedule 26.03.2013

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

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

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

изменить его на

$config['index_page'] = "";

Затем, как уже упоминалось, вам также необходимо добавить правило перезаписи в файл .htaccess следующим образом:

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

Это работает для меня, надеюсь, вы тоже.

person glider    schedule 24.07.2013

Если вы работаете в Linux и используете сервер apache2, нам может потребоваться переопределить файл apache2.conf, помимо изменений в файле .htaccess. Найдите файл конфигурации apache2 в /etc/apache2/apache2.conf .

Каталог поиска /var/www/ Измените AllowOverride None -> AllowOverride All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory
person rabin    schedule 17.02.2015

поместите файл .htaccess в корневой веб-каталог

Какую бы настройку вы не делали - если вышеперечисленное не соблюдается - ничего не получится. Обычно он находится в папке System, он должен быть в корне. Ваше здоровье!

person foxybagga    schedule 03.09.2012
comment
Потратив пару часов, я прочитал это и нашел свою ошибку. - person mohsin.mr; 25.02.2013
comment
Я тоже потратил не менее часа из-за этой маленькой хитрости. По умолчанию файлы .htaccess находятся в каталоге application, а не в корневом каталоге. - person vadim; 13.02.2014

Я пробовал много решений, но я придумал следующее:

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots  \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

Это удалит index.php из URL-адреса по мере необходимости.

person codegeek    schedule 14.02.2014

Я использую эти строки в .htaccess файле; который я помещаю в корневую папку

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

Затем я могу получить доступ к http://example.com/controller/function/parameter.

вместо http://example.com/index.php/controller/function/parameter

person Scorpion    schedule 14.09.2015

Это поможет вам вставить этот код в папку приложения в файле .htacess

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

<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
  php_value short_open_tag 1
</IfModule>
person Majid    schedule 10.09.2013

Это сделало меня полной магией:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

Надеюсь, поможет!

person bmnepali    schedule 04.10.2015

Привет, это сработало со мной

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

а также это

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

где папка — это имя подпапки, если это приложение codeigniter размещено как поддомен, например, имя домена/папка/index.php.

Надеюсь, это сработает для вас. Спасибо.

person lightup    schedule 18.03.2016

Скопируйте следующий код в свой .htaccess

RewriteEngine on
Options -Indexes
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
person dev87    schedule 23.05.2016
comment
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно почему и/или как этот код отвечает на вопрос, повышает его ценность в долгосрочной перспективе. - person Benjamin W.; 23.05.2016

Шаг 1:

Добавьте это в файл htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php [QSA,L] 
</IfModule>

Шаг 2:

Удалить index.php в конфигурации codeigniter

$config['base_url'] = ''; 
$config['index_page'] = '';

Шаг 3:

Разрешить переопределение htaccess в конфигурации Apache (команда)

sudo nano /etc/apache2/apache2.conf и отредактируйте файл и измените его на

AllowOverride All

для папки www

Шаг 4:

Включена перезапись мода apache (команда)

sudo a2enmod переписать

Шаг 5:

Перезапустите Apache (команда)

sudo /etc/init.d/apache2 restart
person Shashank Saxena    schedule 23.08.2019