Nginx não está passando o pedido para o PHP

1

Isso está relacionado a uma pergunta antiga que fiz em SO anos atrás, para os quais nunca recebi uma resposta adequada. Estou apenas configurando um novo servidor (Ubuntu 16.04, Nginx 1.10, PHP 7) e voltando a isso.

Eu tenho uma instância Question2Responder em execução em uma subpasta, com outro código PHP em execução a partir da raiz. Para o material raiz, eu tenho isso no meu bloco de servidores:

location / {
    try_files $uri $uri/ /index.php?$request_uri;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

Para o Q2A, o que eu tinha no meu antigo servidor era:

location /qa/ {
    if (!-e $request_filename) {
        rewrite ^/qa/(.*)$ /qa/index.php?qa-rewrite=$1 last;
    }
}

Isso funciona, mas não acho que seja como deve ser feito (se é mal, etc). Tenho certeza que deve ser possível usando apenas try_files . Eu tentei isso:

location /qa/ {
    try_files $uri $uri/ /qa/index.php?qa-rewrite=$uri&$args;
}

Mas isso não funciona porque /qa/ é passado em qa-rewrite . Deveria passar tudo depois disso no caminho. Existe alguma maneira de remover /qa/ da variável $uri ?

Eu também tentei isso:

location ~ ^/qa/(.*) {
    try_files $uri $uri/ /qa/index.php?qa-rewrite=$1;
}

Mas isso inicia um download do código PHP para index.php ! Como eu faço para passar isso para o mecanismo PHP?

    
por DisgruntledGoat 12.06.2016 / 00:54

1 resposta

1

Se é maligno, mas como os estados da documentação , está ok para rewrite ... last declarações.

No entanto, uma abordagem alternativa (que ainda extrai apenas uma parte do $uri ) é usar um local nomeado no final da instrução try_files :

location /qa/ {
    try_files $uri $uri/ @qa;
}
location @qa {
    rewrite ^/qa/(.*)$ /qa/index.php?qa-rewrite=$1 last;
}

A abordagem de localização regex também é válida. Mas os locais de regex são avaliados de forma diferente para prefixar os locais. Você precisa colocar o bloco location ~ \.php$ acima no bloco location ~ ^/qa/(.*) , para que os URIs com .php sejam processados no local correto.

    
por 12.06.2016 / 10:27