Как убрать «index.php», находящийся в каждом пути в codeigniter где-то в середине? Мне нужны чистые URL без index.php.
Ответ 1
Если вы используете Apache, поместите файл .htaccess в корневой веб-директории, содержащий следующее:
RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Ответ 2
У меня возникли большие проблемы с удалением 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' по умолчанию
| 'PATH_INFO' используется PATH_INFO
| 'QUERY_STRING' используется QUERY_STRING
| 'REQUEST_URI' используется REQUEST_URI
| 'ORIG_PATH_INFO' используется ORIG_PATH_INFO
$config['uri_protocol'] = 'ORIG_PATH_INFO';
Если ваше решение все еще не работает, попробуйте изменить правило перезаписи, чтобы оно включало вашу подпапку. Это часто является проблемой, если вы используете временный URL на рабочем сервере и т. д:
RewriteRule ^(.*)$ /subofolder1/subfolder2/index.php/$1 [L]
Просто поэкспериментируйте с этими опциями, одна из них должна сработать. Также убедитесь, что ваш индексный файл установлен на:
$config['index_page'] = '';
Ответ 3
Все вышеперечисленные ответы не вполне решают проблему, и тогда я обнаружил, что не изменил AllowOverride None на AllowOverride All в файле виртуального хоста по адресу /etc/apache2/sites-available/default:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All <---- замена None на All
</Directory>
<Directory /var/www >
Options Indexes FollowSymLinks MultiViews
AllowOverride All <--- замена None на All
Order allow,deny
allow from all
</Directory>
Ответ 4
Шаг 1 => Поместите файл .htaccess в корневую папку, где находятся папки application и system.
Шаг 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]
Ответ 5
Это .htaccess для одного из моих проектов CI:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /projectFolder/index.php/$1 [L]
Последняя строка должна дать то, что вам нужно, хотя вам может понадобиться или не понадобиться '/projectFolder', в зависимости от того, как настроена ваша структура папок.
Ответ 6
В качестве файла .htaccess хорошим вариантом будет использование файла, предоставляемого Kohana Framework:
# Включите переписывание URL
RewriteEngine On
# Каталог установки
RewriteBase /
# Защитите скрытые файлы от просмотра
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Защитите файлы приложений и системные файлы от просмотра
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]
# Разрешить отображать все существующие файлы и каталоги напрямую
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Переписать все остальные URL на index.php/URL
RewriteRule .* index.php/$0 [PT]
Ответ 7
Шаг 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 mod rewrite (Команда):
sudo a2enmod rewrite
Шаг 5:
Перезапустите Apache (Команда):
sudo /etc/init.d/apache2 restart
Web