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

Ответы:

90

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

Шон Виейра
источник
2
+1 за ссылку! Хотя пришлось немного подправить. получил это с помощью этого -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind
по какой-то причине мне пришлось добавить косую черту в начало RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Генри
По какой-то причине, если у вас есть index.php в URL-адресе, он фактически не удаляется, он остается там и продолжает работать.
CMCDragonkai 03
1
Я использовал все возможные комбинации, но у меня все еще не работает !!!!! как ты заставил его работать ??
Roshdy
Ваша установка Apache должна быть настроена для проверки файлов .htaccess - убедитесь, что это так.
Шон Виейра
60

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

Удачи!

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

Поместите файл.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';
Шаолинь
источник
3
спасибо, я терпел неудачу в этом долгое время, не знаю почему, но твой способ работал как масло: D
Ахмед Сами
1
Спасибо MDeSilva. Этот пост сэкономит мне время.
Санджи
1
Спасибо. Это работает. Кстати, мне не нужно менять config.php.
Stony
1
Спасибо, этот мне помог, я использовал PATH_INFO с WAMP
T.Coutlakis
21

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

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

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

измените это на

$config['index_page'] = "";

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

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

Re0sless
источник
9

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

<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>

     ...

Waqas
источник
Большое спасибо, у меня тоже есть AllowOverride None, теперь он работает!
Вилли
Блог исчез, и мне очень хотелось бы его прочитать. Ни одно из этих решений не работает для меня ...
Кевин Бил,
круто, спас мне день.
JChow
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

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

Капитан воробей
источник
6

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

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

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
Джефкин Кафуна
источник
5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

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

Ramaraju.d
источник
4

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

sudo a2enmod rewrite  

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

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

Finaly ...

sudo /etc/init.d/apache2 restart  

Мой .htaccess

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
miguelitomp
источник
Еще один модуль, который мне нужно было включить, был actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa
4

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

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 
Абхишек Гоэль
источник
3

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

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

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

Мэтью Рапати
источник
3

В качестве файла .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, который просто работает.

Laurent
источник
3

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

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

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

в

$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 включен. Если нет, включите. (Лучший подход)!

Деврадж Гупта
источник
Это правильно и прямо из документации CodeIgniter. Я тоже пользуюсь этим методом.
Dewald Els
2

Я тестировал это на 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вместо хостинга goDaddy AUTOили "QUERY_STRING"для него

это я
источник
2

Посмотрите в \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]

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

планер
источник
2

Если вы используете 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
Рабин
источник
1

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

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

foxybagga
источник
2
Проведя пару часов, я прочитал это и нашел свою ошибку.
mohsin.mr
Я тоже потратил не меньше часа на эту "маленькую" уловку. По умолчанию файлы .htaccess помещаются в applicationкаталог, а не в корневой каталог.
vadim
1

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

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-адреса.

codegeek
источник
1

Я использую эти строки в .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

скорпион
источник
0

Это поможет вам вставить этот код в папку приложения в файле .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>
Маджид
источник
0

Это произвело на меня полную магию:

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]

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

bmnepali
источник
0

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

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.

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

загораться
источник
0

Скопируйте следующий код в свой .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]
dev87
источник
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, улучшает его долгосрочную ценность.
Бенджамин В.
0
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Foldername of your ci/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Мохд Джагир
источник
0

Шаг 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
Шашанк Саксена
источник