Target access http://localhost/app1
Download zip codeiginiter 4 from official site and extract
Install intl
# apt install php-intl
# systemctl restart apache2
Default root folder
+-- app
+-- public
+-- tests
+-- spark
+-- system
+-- writable
|
+composer.json
+env
+LICENSE
+preload.php
+phpunit.xml.dist
+README.md
Change group and permission:
# usermod -a -G www-data [username]
# groups [username]
[username] : [username] cdrom floppy audio dip www-data video plugdev users netdev bluetooth lpadmin scanner libvirt
# chgrp www-data /home/[username] /home/[username]/ci4 /home/[username]/ci4/app1
# chmod g+x /home/[username] /home/[username]/ci4 /home/[username]/ci4/app1
Edit /home/[username]/ci4/app1/app/Config/
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class App extends BaseConfig
{
/**
* --------------------------------------------------------------------------
* Base Site URL
* --------------------------------------------------------------------------
*
* URL to your CodeIgniter root. Typically, this will be your base URL,
* WITH a trailing slash:
*
* E.g., http://example.com/
*/
//public string $baseURL = 'http://localhost:8080/';
public string $baseURL = 'http://localhost/app1/';
Option 1 Using subpath in user home folder
assume your root codeigniter is /home/[username]/ci4/app1
edit file /etc/apache2/sites-enabled/000-default.conf and restart
<virtualhost>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# --- SUBPATH
Alias /app1 /home/[username]/ci4/app1/public
<directory app1="" ci4="" home="" public="" username="">
Options Indexes FoolowSymLinks
AllowOverride All
Require all granted
</directory>
~# apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
~# systemctl restart apache2
No configuration in this option.
Option 2 Using subpath in copy public folder to /var/www/html/
this is close to shared web hosting
create folder app1 inside /var/www/html and move all content inside [ci4_project_root]/public into app1
Edit file index.php
/*
*---------------------------------------------------------------
* 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.
*/
// LOAD OUR PATHS CONFIG FILE
// This is the line that might need to be changed, depending on your folder structure.
//require FCPATH . '../app/Config/Paths.php'; // NOT USED
// ^^^ Change this line if you move your application folder
// USE ABOSOLUTE PATH
require '/home/[username]/ci4/app1/app/Config/Paths.php';
You may do this in web shared hosting. the deference is /var/www/html and /home/[username]/public_html (usually in cpanel).
NOTE: choose one of the options above, don't mix it.
Using Sub domain e.g. app1.example.com (not tested)
Subdomain Method (Best Practice)
This is the cleaner and more secure method as it keeps the entire framework structure intact.
Steps:
- Upload and extract your CodeIgniter zip into the folder you specified above e.g. /home/[username]/ci4/app1/.
- In cPanel/Plesk, create a Subdomain (e.g., app1.domain.com).
- Set its Document Root for sub domain to the public folder of your project (e.g., /home/[username]/ci4/app1/public) .
- No code changes are needed. Your setup is complete.