'How to remove public/index.php/ from url in Codeigniter 4

I want normal URL like www.sample.com/controller not www.sample.com/public/index.php/controller.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/index.php/$1 [L]

My .htaccess file



Solution 1:[1]

Just do

Step 1: In public/ directory, copy index.php and .htaccess to your root project directory.

Step 2: In the root project directory, open index.php and edit the following line:

index.php -> $pathsPath = FCPATH . '../app/Config/Paths.php';

to

index.php => $pathsPath = FCPATH . 'app/Config/Paths.php';

Solution 2:[2]

okay , this is how I solved this problem : you need 2 .htaccess files
the first one in root path "/.htaccess" of your project the second one in the public folder "public/.htaccess"

and here is the first one "/.htaccess"

# this is my version (Nassim) of the htaccess file , I use this one in the root directory "/"
# of the project and a second .htaccess in the public directory

DirectoryIndex /public/index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|assets|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./public/index.php/$1 [L,QSA]

and the second one (comes with CI installation): "public/.htaccess"

# I recommend you remove `IfModule`. Because if you need mod_rewrite,
# you don't need `IfModule`. If you don't need it, you don't need this file
# at all.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond $1 !^(index\.php|images|assets|doc|data|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Solution 3:[3]

go to app/Config/App.php and then public $indexPage = 'index.php'; change to public $indexPage = '';

works like charm

Solution 4:[4]

Create a file called index.php outside of the public directory and write the command

require_once './public/index.php';

That's it.

Solution 5:[5]

  1. Set up Virtual hosts (if you haven't already), but make sure to point to /public directory (xampp example):

ServerAdmin [email protected]
ServerName example.com
DocumentRoot "path-to-project/public"
<Directory "path-to-project/public">
    Order allow,deny
    Allow from all
    AllowOverride All
    Require all granted
</Directory>

  1. Do not touch any .htaccess file in default CI4 distribution
  2. Edit app/Config/App.php - $baseURL = 'http://www.example.com/'; $indexPage = '';

Solution 6:[6]

I've no idea how you get this .htaccess. If you download CodeIgniter 4 from here and you can see Htaccess file is different what you added.

Since there are many changes in CodeIgniter (1,2,3) to Codeigniter 4, htaccess moved to public/ folder which will set to document root and .htaccess which place outside will not valid in CI 4


Correct path to .htaccess

public/.htaccess

Note: I just tested index.php URL issue and there was no issue like that. worked/loaded fine without index.php

Solution 7:[7]

create a .htaccess file in /public with :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Solution 8:[8]

Step 1: In public/ directory, copy index.php and .htaccess to your root project directory.

Step 2: In the root project directory, open index.php and edit the following line:

change:

$pathsPath = FCPATH . '../app/Config/Paths.php';

change TO

($pathsPath = FCPATH . 'app/Config/Paths.php';)

enter image description here

Solution 9:[9]

have you tried this:

    RewriteEngine On
    RewriteBase /yoursite.com/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ public/index.php/$1 [L]

Solution 10:[10]

I was able to "solve" the problem in my hostinger server in one project. After I created a new project with a newer version of codeigniter 4 I realized that I could no longer use the same solution and after hours of research I found a very simple solution.

What I did is I changed the root directory to be the public folder using the .htaccess that is located at the root folder of the project.

#RewriteEngine on
#RewriteCond %{HTTP_HOST} ^mydomain.com$ [NC,OR]
#RewriteCond %{HTTP_HOST} ^mydomain.com$
#RewriteCond %{REQUEST_URI} !public/
#RewriteRule (.*) /public/$1 [L]

Using that trick I could load my codeigniter 4 in a live server without any problem. Actually, I used this to configure a codeigniter 4 project inside a subdomain.

Solution 11:[11]

change the index.php =>

require realpath(FCPATH . 'app/Config/Paths.php') ?: FCPATH . '../app/Config/Paths.php';

to

require realpath(FCPATH . 'app/Config/Paths.php') ?: FCPATH . 'app/Config/Paths.php';

Solution 12:[12]

Go to app/Config/App.php and find public $indexPage = 'index.php';. Remove index.php from this public variable and that's it.

Solution 13:[13]

To solve the above issue removing public/index.php from url then you should following those below steps:

  1. Copy the index.php and .htaccess files from the public/ directory.

  2. Add the files to the root project directory.

  3. Change your root project directory index.php file $pathsPath = realpath(FCPATH . '../app/Config/Paths.php'); into $pathsPath = realpath(FCPATH . 'app/Config/Paths.php');

Here is the full code of index.php file:

// Valid PHP Version?
$minPHPVersion = '7.2';
if (phpversion() < $minPHPVersion)
{
    die("Your PHP version must be {$minPHPVersion} or higher to run CodeIgniter. Current version: " . phpversion());
}
unset($minPHPVersion);

// Path to the front controller (this file)
define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR);

// Location of the Paths config file.
// This is the line that might need to be changed, depending on your folder structure.
$pathsPath = realpath(FCPATH . 'app/Config/Paths.php');
// ^^^ Change this if you move your application folder

/*
 *---------------------------------------------------------------
 * BOOTSTRAP THE APPLICATION
 *---------------------------------------------------------------
 * This process sets up the path constants, loads and registers
 * our autoloader, along with Composer's, loads our constants
 * and fires up an environment-specific bootstrapping.
 */

// Ensure the current directory is pointing to the front controller's directory
chdir(__DIR__);

// Load our paths config file
require $pathsPath;
$paths = new Config\Paths();

// Location of the framework bootstrap file.
$app = require rtrim($paths->systemDirectory, '/ ') . '/bootstrap.php';

/*
 *---------------------------------------------------------------
 * LAUNCH THE APPLICATION
 *---------------------------------------------------------------
 * Now that everything is setup, it's time to actually fire
 * up the engines and make this app do its thang.
 */
$app->run();

Solution 14:[14]

Project Structure codeigniter4


Project Structure codeigniter4

If Run project in Xamp show Like this


enter image description here


Copy public-->index.php to rootfolder-->index.php enter image description here


Now run Like this in webbrowser show this like error to solve this enter image description here


solution enter image description here

    $pathsConfig = FCPATH . '../app/Config/Paths.php';
    to
   $pathsConfig = FCPATH . 'app/Config/Paths.php';

Now run

enter image description here


create .htaccess in root folder

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

enter image description here


Now you can switch your controller name without .htaccess your url must be like this http://localhost:8080/payinlinks/index.php/login else http://localhost:8080/payinlinks/login enter image description here