Nginx - Route all requests to single script

Solution 1:

Add this,

 location / {
                    try_files $uri $uri/ /index.php;

What it does is it first check the existence of $uri and $uri/ as real files/folders and if they don't exist will just go through /index.php (that is my setup for Zend framework where routing is done through index.php) - of course if you need to pass some parameters, just append to the /index.php a ?q= at the end and it will pass the parameters.

Make sure that the try_file directive is available from version 0.7.27 and onward.

Solution 2:

I figured it out on my own! Yeah!

All I needed for the location block was:

location /  {
    include /etc/nginx/fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;

Everything else remained largely the same.

Solution 3:

To preserve GET arguments use the following:

location / {
    try_files $uri $uri/ /index.php$is_args$args;

$is_args becomes '?' if $args in not empty

Or even more simple:

location / {
    try_files /index.php$is_args$args;