Проблемы с удалением index.php в CodeIgniter 3

Я хочу получить доступ к моим 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 об этом, поэтому я отправляю решение, которое сработало для меня.

  1. Включить Rewrite engine

     sudo a2enmod rewrite 
  2. Измените конфигурационный файл 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> 
  1. Создайте файл «.htaccess» в корне вашего проекта Codeigniter, то есть: вместе с приложениями, системными папками.

В файле поставьте следующее:

  RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] 
  1. В файле config / config.php измените:

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

в

  $config['index_page'] = ''; 
  1. Перезапустить 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"; 

Хорошо, я боролся с этим в течение двух дней, и вот мое решение для XAMPP и CodeIgniter 3

Создайте новый файл .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