nginx 'try_files não funciona com variáveis de captura de padrão de localização

1

se eu tiver uma diretiva de localização com capturas nomeadas:

location ~ ^/api/(?<endpoint>[^/]+)(?<pathinfo>.*) {
    root /opt/software/endpoints;
    ## breaks the config:
    # try_files $endpoint.php =418;
    include fastcgi_params; # as supplied by debian 8 "jessie"
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root/$endpoint.php;
}

sem o try_files, chamar o url correto invoca o arquivo php e retorna a saída.

curl -s http://example.com/api/foo/param
> output of foo.php with param "param"

mas quando eu também ativo o try_files na configuração, o curl sempre retorna 418.

(o motivo é, que eu quero especificar um redirecionamento interno, no caso de não existir tal ponto de extremidade, como último parâmetro para try_files. mas eu acho que = 418 demonstra a perplexidade melhor)

    
por Max-Julian Pogner 25.05.2016 / 18:10

1 resposta

0

Você deve capturar a barra inicial. nginx URIs têm uma barra inicial, por isso a sua diretiva try_files (como você a tem) sempre falhará. Você adicionou a barra de volta à sua diretiva fastcgi_param SCRIPT_FILENAME .

Tente isto:

location ~ ^/api(?<endpoint>/[^/]+)(?<pathinfo>.*) {
    root /opt/software/endpoints;
    try_files $endpoint.php =418;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$endpoint.php;
}
    
por 26.05.2016 / 00:01

Tags