Use o index.php como uma página de erro personalizada no seu local de downloads (e não envie um cabeçalho 404):
location ^~ /downloads {
...
fastcgi_intercept_errors on;
error_page 404 =200 /downloads/index.php;
}
Estou tentando obter todas as solicitações para:
%código%
redirecionar para http://example.com/downloads/*
, exceto se o arquivo solicitado existir em http://example.com/downloads/index.php
ex:
/downloads/
= > %código%
http://example.com/downloads
= > %código%
/downloads/index.php
= > %código%
Meu problema atual é que eu tenho o redirecionamento para o php funcionando, mas arquivos estáticos não são servidos ou o contrário.
Aqui está o meu atual vhost conf: (que redireciona arquivos finos, mas estáticos são enviados para php e falhar)
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;
}
}
Precisão: arquivos estáticos são links simbólicos criados por /downloads/index.php
Editar: possível duplicado , mas esta solução não parece funcionar para mim.