Nginx redirect all request that does not match a file to a php file
- by cyrbil
I'm trying to get all request to:
http://mydomain.com/downloads/*
redirect to http://mydomain.com/downloads/index.php except if the requested file exist in /downloads/
ex:
http://mydomain.com/downloads = /downloads/index.php
http://mydomain.com/downloads/unknowfile = /downloads/index.php
http://mydomain.com/downloads/existingfile = /downloads/existingfile
My current problem is I have either the redirection to php working but static files not served or the opposite.
Here is my current vhost conf: (which redirect fine but static files are send to php and fail)
server {
listen 80; ## listen for ipv4; this line is default and implied
server_name domain.com;
root /data/www;
index index.php index.html;
location / {
try_files $uri $uri/ /index.html;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
location ^~ /downloads {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
try_files $uri @downloads;
}
location @downloads {
rewrite ^ /downloads/index.php;
}
# pass the PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Precision: static files are symlinks created by /downloads/index.php
Thank you for your help.