title: Rewrite all requests to index.php with nginx
body: <p>In my apache configuration I have the following simple rewrite rule which</p>
  
  <ol>
  <li>unless file exists will rewrite to index.php</li>
  <li>on the urls you never see the file extension (.php)</li>
  </ol>
  
  <p>how can I rewrite this in nginx?</p>
  
  <pre><code>#
  # Redirect all to index.php
  #
  RewriteEngine On
  
  # if a directory or a file exists, use it directly
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  
  RewriteCond %{REQUEST_URI} (/[^.]*|\.)$ [NC]
  RewriteRule .* index.php [L]
  </code></pre>
  
  <p>Here's how my nginx server block looks like now, but it doesn't work :(</p>
  
  <pre><code>root /home/user/www;
  index index.php;
  
  # Make site accessible from http://localhost/
  server_name some-domain.dev;
  
  
  ###############################################################
  # exclude /favicon.ico from logs
  location = /favicon.ico {
      log_not_found off;
      access_log off;
  }   
  
  ##############################################################
  # Disable logging for robots.txt
  location = /robots.txt {
      allow all;
      log_not_found off;
      access_log off;
  }   
  
  ##############################################################
  # Deny all attempts to access hidden files such as 
  # .htaccess, .htpasswd, .DS_Store (Mac).
  location ~ /\. {
      deny all;
      access_log off;
      log_not_found off;
  }   
  
  ##############################################################
  #   
  location / { 
      include /etc/nginx/fastcgi_params;
      fastcgi_param   SCRIPT_FILENAME  $document_root/index.php$args;
      fastcgi_pass    127.0.0.1:9000;
  }   
  
  ###############################################################
  # serve static files directly
  location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
      access_log off;
      expires    30d;
  }   
  
  ###############################################################
  # redirect server error pages to the static page /50x.html
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root html;
  }   
  
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #   
  location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
      # With php5-cgi alone:
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi_params;
  }
  </code></pre>