Я хочу получить доступ к моим URL без index.php
в CodeIgniter. Вот мой Blog
контроллер
class Blog extends CI_Controller { public function index() { echo 'hello world'; } public function about() { echo 'about page'; } }
Теперь я могу получить доступ к index
через http://localhost/codeigniter/index.php/Blog
, но мне нужно получить к нему доступ с этим URL http://localhost/codeigniter/Blog
.
ЗАМЕТКА
Я удалил index.php из файла конфигурации .htaccess
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php/$0 [PT,L] Environment
Windows, XAMPP, PHP Версия 5.6.3
Как удалить index.php из url было задано так много раз, это то же самое, что и для codeigniter 2 и 3 .
Для Xampp с Windows Codeigniter
Найти приложение / config / config.php
Заменить это
$config['base_url'] = "";
С этим
$config['base_url'] = "your-project-url";
Заменить это
$config['index_page'] = "index.php"
С этим
$config['index_page'] = ""
В главном каталоге создайте файл с именем .htaccess
Я использую код ниже, отлично работает для меня в xampp в окнах. Больше htacces здесь
Options +FollowSymLinks Options -Indexes <FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))"> Order deny,allow Deny from all </FilesMatch> DirectoryIndex index.php RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Примечание. Убедитесь, что ваши контроллеры похожи на пример Welcome.php, а не welcome.php. Вам также может понадобиться создать новые маршруты в вашем route.php, если удалить index.php
Я только сейчас боролся с этой частью снова, даже после того, как привык к Codeigniter в течение 2+ лет.
Ни один из ответов не помог мне точно, включая официальную страницу Codeigniter об этом, поэтому я отправляю решение, которое сработало для меня.
Включить Rewrite engine
sudo a2enmod rewrite
Измените конфигурационный файл Apache, чтобы позволить папкам разрешать переопределение настроек безопасности по умолчанию
sudo nano /etc/apache2/apache2.conf
В разделе «Каталог» в зависимости от местоположения ваших файлов, отредактируйте
AllowOverride None
в
AllowOverride All
например: Мои файлы сервера находятся в «/ var / www», поэтому мой окончательный результат для соответствующих опций Directory:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
В файле поставьте следующее:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
В файле config / config.php измените:
$config['index_page'] = 'index.php';
в
$config['index_page'] = '';
Перезапустить apache2:
sudo service apache2 restart
Наслаждайтесь!
Измените свой путь base_url, который существует в приложении / config
$config['base_url'] ='localhost/projectname/index.php'
в
$config['base_url'] ='localhost/projectname/'
Включить mod_rewrite перезапустите сервер apache и в вашем .htaccess
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Чтобы удалить index.php
создайте файл .htaccess
в той же папке, что и основной файл index.php вашего сайта.
Затем добавьте следующий код в этот вновь созданный файл .htaccess:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # Removes index.php from ExpressionEngine URLs RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] RewriteCond %{REQUEST_URI} !/system/.* [NC] RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] # Directs all EE web requests through the site index file RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1 [L] </IfModule>
этот код состоит из двух частей
1 – удалить index.php
2 – перенаправить все запросы сайта в индексный файл.
Шаг: -1 Откройте папку “application/config”
и откройте файл “config.php“
. найти и заменить приведенный ниже код в файле config.php
.
//find the below code $config['index_page'] = "index.php" //replace with the below code $config['index_page'] = ""
Шаг: -2 Запишите код в файле .htaccess.
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
Шаг: -3 В некоторых случаях настройка по умолчанию для uri_protocol работает неправильно. Чтобы решить эту проблему, просто откройте файл “application/config/config.php“
, затем найдите и замените приведенный ниже код
//find the below code $config['uri_protocol'] = "AUTO" //replace with the below code $config['uri_protocol'] = "REQUEST_URI"
в config.php
$config['base_url'] = ''; $config['index_page'] = '';
в .htacess
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
наконец, это отлично работает для меня. Я изменил файл .htaccess
с этим контентом
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /codeigniter #Removes access to the system folder by users. #Additionally this will allow you to create a System.php controller, #previously this would not have been possible. #'system' can be replaced if you have renamed your system folder. RewriteCond %{REQUEST_URI} ^system.* RewriteRule ^(.*)$ /index.php?/$1 [L] #When your application folder isn't in the system folder #This snippet prevents user access to the application folder #Submitted by: Fabdrol #Rename 'application' to your applications folder name. RewriteCond %{REQUEST_URI} ^application.* RewriteRule ^(.*)$ /index.php?/$1 [L] #Checks to see if the user is attempting to access a valid file, #such as an image or css document, if this isn't true it sends the #request to index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> <IfModule !mod_rewrite.c> # If we don't have mod_rewrite installed, all 404's # can be sent to index.php, and everything works as normal. # Submitted by: ElliotHaughin ErrorDocument 404 /index.php </IfModule>
И эти изменения сделали
$config['index_page'] = "index.php" //replace with the below code $config['index_page'] = "" $config['base_url'] = "your-project-url";
Создайте новый файл .htaccess в корневом каталоге (не в папке приложения CodeIgniter, где есть еще один файл htacces, не трогайте его), с этим внутри:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
Затем найдите и измените эти значения в файле config.php (файл CodeIgniter, в папке config):
$config['base_url'] = 'localhost/YourProject'; $config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI';
Наконец, в httpd.conf (файл конфигурации Apache) найдите:
#LoadModule rewrite_module modules/mod_rewrite.so
и раскомментируйте строку (удалите #).
Это оно! Теперь
localhost/myProject/news
работает, как будто я пишу
localhost/myProject/index.php/news