In my apache configuration I have the following simple rewrite rule which
Here is what worked for me to solve part 1 of this question:
location / {
rewrite ^([^.]*[^/])$ $1/ permanent;
try_files $uri $uri/ /index.php =404;
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
rewrite ^([^.]*[^/])$ $1/ permanent; rewrites non-file addresses (addresses without file extensions) to have a "/" at the end. I did this because I was running into "Access denied." message when I tried to access the folder without it.
try_files $uri $uri/ /index.php =404; is borrowed from SanjuD's answer, but with an extra 404 reroute if the location still isn't found.
fastcgi_index index.php; was the final piece of the puzzle that I was missing. The folder didn't reroute to the index.php without this line.
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;
}
Using nginx $is_args instead of ? For GET query Strings
location / { try_files $uri $uri/ /index.php$is_args$args; }
To pass get variables as well use $args
:
location / {
try_files $uri $uri/ /index.php?$args;
}
Here's the answer of your 2nd question :
location / {
rewrite ^/(.*)$ /$1.php last;
}
it's work for me (based my experience), means that all of your blabla.php will rewrite into blabla
like http://yourwebsite.com/index.php to http://yourwebsite.com/index
Perfect solution I have tried it and succeed to get my index page when I have append this code in my site configuration file.
location / {
try_files $uri $uri/ /index.php;
}
In configuration file itself explained that at "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.