Objective
Remove the index.php prefix from your nginx code igniter instance.
Assumptions
- In your main nginx conf file you define how php is called (unix socket or ip:port)
- You will replace foo.example.com with whatever your domain name is
- The proper logging path will be defined per your system as opposed to the location i have used
Configurations
Example upstream in main nginx conf
# Upstream to abstract backend connection(s) for PHP.
upstream php {
#using unix socket
server unix:/tmp/php-fpm.sock;
#
#
#server 127.0.0.1:9000;
}
Virtual Host to remove index.php
Here’s how i did it:
erver {
server_name .foo.example.com;
root /opt/www/foo.example.com;
access_log /opt/nginx/logs/foo-access.log;
error_log /opt/nginx/logs/foo-error.log info;
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 / {
try_files $uri $uri/ @codei;
}
location @codei {
rewrite ^/[_0-9a-zA-Z-]+/(.*\.php)?$ /$1 last;
rewrite .* /index.php last;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass php;
fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;
}
}
CodeIgniter Specific Info
After this, make sure that your codeIgniter config.php contains the following information:
$config['base_url'] = "http://foo.example.com/"; $config['index_page'] = ""; $config['uri_protocol'] = "REQUEST_URI";
Still not working?
Try following the CodeIgniter http://ellislab.com/codeigniter/user_guide/tutorial/static_pages.html
