nginx: try_files usando o diretório errado

1

Então eu tenho esses dois blocos de localização no nginx:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
    add_header Access-Control-Allow-Origin *;
}

location /v1/merchants {
    root /var/www/public/api-merchants;
    try_files $uri $uri/ /index.php$is_args$args;
}

location / encaminha para o index.php correto, mas location/v1/merchants deve redirecionar para /var/www/public/api-merchants/index.php , mas redireciona para o mesmo index.php de location /

O que estou fazendo de errado?

    
por Rob 04.09.2017 / 21:28

1 resposta

1

O elemento final da instrução try_files é um URI. O URI do script que você deseja é presumivelmente /v1/merchants/index.php . Consulte este documento para obter detalhes.

Se o arquivo estiver localizado em /var/www/public/api-merchants/index.php , você deve usar uma diretiva alias e não uma diretiva root . Consulte este documento para obter detalhes.

Você não tem meios para executar arquivos PHP dentro dessa nova raiz, então o seu bloco location ~ \.php location assumirá. Você precisa usar um bloco de localização aninhado e replicar sua instrução PHP (por exemplo, fastcgi_pass ) dentro dela. Além disso, use o modificador ^~ para impedir que o outro bloco de localização location ~ \.php assuma o controle. Consulte este documento para obter detalhes.

Por exemplo:

location ^~ /v1/merchants {
    alias /var/www/public/api-merchants;
    if (!-e $request_filename) { rewrite ^ /v1/merchants/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
        fastcgi_pass   ...;
    }
}

Evito usar try_files com alias devido a problema . Observe este aviso sobre o uso de if .

    
por 05.09.2017 / 10:29

Tags