Nginx e PHP-FPM: Parâmetros de consulta não serão passados para o PHP

3

Atualmente estou configurando uma máquina para desenvolvimento local usando o Vagrant. Tudo é executado como deveria, espera que os parâmetros de consulta não sejam passados para o PHP em subpáginas.

Isso significa que em www.example.com/?a=b , o parâmetro de consulta está acessível, mas em www.example.com/subpage/?a=b não está.

A resposta geral que encontrei usando o Google para esse problema é modificar a diretiva try_files , mas isso não está funcionando para mim. Também verifiquei o request_order & variables_order in php.ini - tudo está configurado corretamente lá.

Esta é minha configuração:

 server {
     listen                80;
     server_name           example.com www.example.com;
     root                  /var/www/public;

     location / {
         index   index.html index.htm index.php;
         try_files $uri $uri/ /index.php?$query_string;
         include /etc/nginx/fastcgi_params;
     }

     location ~ \.php$ {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $request_filename;
         include /etc/nginx/fastcgi_params;
     }

     sendfile off;
}

Como não sei muito sobre a configuração do servidor & administração, eu estou batendo em uma parede de tijolos aqui, ainda aqui estão algumas coisas que eu também verifiquei:

  • $query_string está definido em /etc/nginx/fastcgi_params como fastcgi_param QUERY_STRING $query_string; , o que parece correto para mim.
  • O caminho para fastcgi_params está correto

Como funciona quando não está em uma subpágina, suspeito que os blocos de localização não estão combinando, mas eu realmente não entendo como isso pode ser o caso - por favor, ajude.

    
por Sven 25.04.2015 / 13:00

2 respostas

3

Você precisa usar $ is_args para o ponto de interrogação & $ args ou $ query_string para a string de consulta depois do ponto de interrogação.

aqui é a última combinação.

try_files $uri $uri/ /index.php$is_args$query_string;

Certifique-se também de ter definido

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;

depois passe-o fastcgi;

fastcgi_pass 127.0.0.1:9000;
    
por 25.04.2015 / 13:18
0

Uma string de consulta começa com um ponto de interrogação.

Em seguida, defina no segundo bloco:

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Remova include /etc/nginx/fastcgi_params; no primeiro bloco, pois você não tem nenhuma diretiva fastcgi_pass aqui.

    
por 25.04.2015 / 13:07