I personally don’t use Codeigniter (was never much of a fan of PHP frameworks), however I had a client approach me with this issue so I decided to take a stab at it.
Now normally you would look for any existing .htaccess that comes with a script package and attempt to convert the rewrite rules. But seriously though, why do we really want to go thru all that fuss when we can simply use try files:
server { listen 80; server_name yourdomain.com www.yourdomain.com; root /path/to/your/website.com/; location / { try_files $uri $uri/ /index.php; } # For more information on the next two lines see http://kbeezie.com/view/nginx-configuration-examples/ include php.conf; include drop.conf; }
In a nutshell this should normally work… but why does it not?
Quite simple really; CodeIgniter by default uses PATH_INFO which is a really antiquated method of parsing the uri. As a result we must tell CI to use REQUEST_URI instead. To do this open up your config.php under /system/application/config/ and find the $config[‘uri_protocol’] and set it to this:
$config['uri_protocol'] = "REQUEST_URI";
You could also choose to use AUTO, but since we know we’ll be dealing with request_uri, it is best to set it as such (though if you do run into problems, give AUTO a try).
If you have not already set the index page, you will want to blank it out in order for it to work with a rewrite method (request_uri, etc).
$config['index_page'] = "";
For known static files, take it a step further and capture common static requests so that you can cache accordingly:
location ~* \.(ico|css|js|gif|jpe?g|png)$ { expires max; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; }