Rewrite all requests to index.php with nginx
Solution 1:
I have tried this and succeeded to get my index page. When I have added this code in my site configuration file:
location / {
try_files $uri $uri/ /index.php;
}
Inside the configuration file itself it is explained that these are the configured steps
First attempt to serve request as file, then as directory, then fall back to index.html
In my case it is index.php
, as I am providing page through php code.
Solution 2:
To pass get variables as well use $args
:
location / {
try_files $uri $uri/ /index.php?$args;
}
Solution 3:
1 unless file exists will rewrite to index.php
Add the following to your location ~ \.php$
try_files = $uri @missing;
this will first try to serve the file and if it's not found it will move to the @missing
part. so also add the following to your config (outside the location
block), this will redirect to your index page
location @missing {
rewrite ^ $scheme://$host/index.php permanent;
}
2 on the urls you never see the file extension (.php)
to remove the php extension read the following: http://www.nullis.net/weblog/2011/05/nginx-rewrite-remove-file-extension/
and the example configuration from the link:
location / {
set $page_to_view "/index.php";
try_files $uri $uri/ @rewrites;
root /var/www/site;
index index.php index.html index.htm;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/site$page_to_view;
}
# rewrites
location @rewrites {
if ($uri ~* ^/([a-z]+)$) {
set $page_to_view "/$1.php";
rewrite ^/([a-z]+)$ /$1.php last;
}
}
Solution 4:
Flat and simple config without rewrite, can work in some cases:
location / {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /home/webuser/site/index.php;
}