Nginx & PHP-FPM: Query parameters won't be passed to PHP

10,220

You need to use $is_args for question mark & $args or $query_string for query string afterwards question mark.

here it's the last combination.

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

Also be sure that you have set

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

then pass it fastcgi;

fastcgi_pass 127.0.0.1:9000;
Share:
10,220

Related videos on Youtube

Sven
Author by

Sven

Updated on September 18, 2022

Comments

  • Sven
    Sven almost 2 years

    I am currently setting up a machine for local development using Vagrant. Everything runs as it should, expect query parameters aren't passed to PHP on subpages.

    That means on www.example.com/?a=b, the query parameter is accessible, but on www.example.com/subpage/?a=b it's not.

    The general reply I found using Google for this problem is to modify the try_files directive, but that isn't working for me. I've also checked the request_order & variables_order in php.ini – everything is setup correctly there.

    This is my config:

     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;
    }
    

    Since I don't know much about server setup & administration, I am hitting a brick wall here, still here are a few things I also checked:

    • $query_string is set in /etc/nginx/fastcgi_params as fastcgi_param QUERY_STRING $query_string; which seems correct to me.
    • The path to fastcgi_params is correct

    Since it works when not being on a subpage, I am now suspecting the location blocks not matching, but I really don't understand how this could be the case – please help.

    • Dalibor Karlović
      Dalibor Karlović about 9 years
      It's a long shot, but make sure you're not being redirected before you handle the request. You can easily see this in Chrome's DevTools Network tab, use Preserve log.
    • Sven
      Sven about 9 years
      @DaliborKarlović Thanks for the suggestion – I checked & I am not being redirected.
    • Pothi Kalimuthu
      Pothi Kalimuthu about 9 years
      Turning on debugging and watching the log would help. nginx.org/en/docs/debugging_log.html . Most distributions come with debugging pre-compiled.
    • elif
      elif over 8 years
      Could you make this work? @Sven
  • Sven
    Sven about 9 years
    Do I need to put this in both location blocks?
  • Xavier Lucas
    Xavier Lucas about 9 years
    @Sven Why would you put this in the first block ? There's no fastcgi_pass directive here.
  • risyasin
    risyasin about 9 years
    check for $is_args in documentation. nginx.org/en/docs/http/ngx_http_core_module.html
  • Sven
    Sven about 9 years
    Okay I see. Unfortunately, it still doesn't work. Is the order of the directives in the location block important?
  • Xavier Lucas
    Xavier Lucas about 9 years
    @Sven No it's not except if your include directive override a previous configuration line using the same directive. Can you clarify the it doesn't work ? This really seems to come from your app. Also make sure you are not hitting browser cache when testing.
  • Sven
    Sven about 9 years
    Okay, thanks. For clarification: _SERVER["QUERY_STRING"] is still empty on a subpage with query parameters present (example.com/subpage/?a=b). On example.com?a=b the query string is present in _SERVER["QUERY_STRING"]. Do I need to do something else that reloading Nginx for changes to take effect?
  • Sven
    Sven about 9 years
    Cool, I think I understand. Still, query string are not present on subpages.
  • Xavier Lucas
    Xavier Lucas about 9 years
    @Sven Nothing else than reloading is required.
  • Sven
    Sven about 9 years
    Then it's exactly setup according to your answer, but not working, sorry.
  • Francisco
    Francisco over 7 years
    Man, $is_args$query_string saved my life for a query parameters in pages. Thanks a lot.