Nginx redireciona todas as solicitações que não correspondem a um arquivo para um arquivo php

1

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.

    
por Cyrbil 06.11.2013 / 10:14

1 resposta

1

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;

}
    
por 06.11.2013 / 12:28