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
|
1 2 3 4 5 6 7 8 |
# 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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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:
|
1 2 3 |
$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