Use the following configuration in Apache's httpd.conf file or within a virtual host configuration. Note that you should set DocumentRoot
and ServerName
fit to your environment:
<VirtualHost *:80>
DocumentRoot "/var/www/codeignitor"
ServerName www.example.com
# Other directives here
</VirtualHost>
To enable pretty URL, add .htaccess
in the webroot directory:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
To use Nginx, you should install PHP as an FPM SAPI. You may use the following Nginx configuration, replacing root
value with the actual path for Codeignitor porject and server_name
with the actual hostname to serve.
server {
server_name domain.tld;
root /var/www/codeignitor;
index index.html index.php;
# set expiration of assets to MAX for caching
#location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
# expires max;
# log_not_found off;
#}
location / {
# Check if a file or directory index file exists, else route it to index.php.
try_files $uri $uri/ /index.php;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi.conf;
#fastcgi_param CI_ENV 'production';
}
# Deny for accessing .htaccess files for Nginx
location ~ /\.ht {
deny all;
}
# Deny for accessing codes
location ~ ^/(application|system|tests)/ {
return 403;
}
}
Codeiniter would guess your environment URI to implement pretty URL, if your Codeiniter application is under a sub folder of webroot, you just need to set the web server try file to current directory.
The following example would use /_projects/codeigniter
as subdirectory path.
From the orignal Codeigniter config file application/config/config.php
:
$config['base_url'] = '';
$config['index_page'] = 'index.php';
We could set subdirectory path to base_url
and disable index_page
:
$config['base_url'] = '/_projects/codeigniter';
$config['index_page'] = '';
After setting, you would able to consistently bind URL when you use Url generator:
$this->load->helper('url');
echo site_url('controller/action'); // `/_projects/codeigniter/controller/action`
echo base_url("controller/action"); // `/_projects/codeigniter/controller/action`
redirect('controller/action'); // Go to `/_projects/codeigniter/controller/action`
It's easy to set pretty URL for Codeiniter in Apache where ever the application directory is, add .htaccess
in the webroot directory:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Customize the location path to current Codeiniter application directory:
location /_projects/codeigniter/ {
try_files $uri $uri/ /_projects/codeigniter/index.php;
}