Как убрать "index.php", торчащий на каждом пути в codeigniter где-то в центре? Я хочу чистый не index.php-fied URLs?
Как удалить index.php в пути codeigniter
Ответы (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/
RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
- person Henry; 08.09.2013
У меня были большие проблемы с удалением 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'] = '';
Удачи!
Поместите файл .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';
Посмотрите в файле system\application\config\config.php, там есть переменная с именем index_page
Это должно выглядеть так
$config['index_page'] = "index.php";
изменить его на
$config['index_page'] = "";
Затем, как уже упоминалось, вам также необходимо добавить правило перезаписи в файл .htaccess.
Примечание: в CodeIgniter v2 этот файл был перемещен из системной папки в application\config\config.php
Все вышеперечисленные методы не помогли мне, и затем я обнаружил, что не меняю 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>
...
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]
после изменения RewriteRule .* index.php/$0 [PT, L] с именем папки проекта «codeigniter». У меня это работает. Спасибо, ребята, за вашу поддержку.
Шаг 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]
Просто подумал, что могу добавить
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”
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
Это определенно должно сработать.. попробуйте
Убедитесь, что вы включили 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]
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]
Это .htaccess для одного из моих проектов CI:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /projectFolder/index.php/$1 [L]
Последняя строка должна дать вам то, что вам нужно, хотя вам может понадобиться или не понадобиться '/projectFolder' в зависимости от того, как настроена структура вашей папки. Удачи!
Используйте mod_rewrite в соответствии с инструкциями в этом руководстве на вики-сайте CI.
В качестве файла .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, который просто работает.
Есть два способа решить 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 включен. Если нет, пожалуйста, включите. (Лучший подход)!
Я тестировал это на 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
Посмотрите в файле \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]
Это работает для меня, надеюсь, вы тоже.
Если вы работаете в 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
поместите файл .htaccess в корневой веб-каталог
Какую бы настройку вы не делали - если вышеперечисленное не соблюдается - ничего не получится. Обычно он находится в папке System, он должен быть в корне. Ваше здоровье!
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-адреса по мере необходимости.
Я использую эти строки в .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 а>
Это поможет вам вставить этот код в папку приложения в файле .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>
Это сделало меня полной магией:
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]
Надеюсь, поможет!
Привет, это сработало со мной
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.
Надеюсь, это сработает для вас. Спасибо.
Скопируйте следующий код в свой .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]
Шаг 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