<div dir="ltr">Your problem is that you are adding an extra question mark.<div><br></div><div>From the docs:</div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">$is_args<br></font><font face="monospace">“?” if a request line has arguments, or an empty string otherwise</font></blockquote><br></div><div>Take the extra question mark out of your try_files line. It should look like this:</div><div><br></div><div><font face="monospace">try_files $uri $uri/ /index.php$is_args$args; </font> <br></div><div><br></div><div><br></div><div>Moshe</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 27, 2020 at 9:33 AM petecooper <<a href="mailto:nginx-forum@forum.nginx.org">nginx-forum@forum.nginx.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello.<br>
<br>
I run a PHP + MySQL content management system on Nginx (1.19.0 at time of<br>
writing) and an issue has arisen with the way I'm handing PHP files in some<br>
situations.<br>
<br>
The issue appears to manifest with queries when they are prepended by a<br>
path, where a `?` is prepended. If the queries exist in the root location,<br>
they work as expected.<br>
<br>
Take the two following URIs, note the second has a `path` set, but this does<br>
not exist on the filesystem. The CMS might, for example, have a path set to<br>
'articles' or 'blog'.:<br>
<br>
<a href="http://subdomain.example.com/?a=b&d=g" rel="noreferrer" target="_blank">http://subdomain.example.com/?a=b&d=g</a> (No `path`)<br>
<a href="http://subdomain.example.com/path/?a=b&d=g" rel="noreferrer" target="_blank">http://subdomain.example.com/path/?a=b&d=g</a> (With `path`)<br>
<br>
Running $_GET array gives different results:<br>
<br>
= No `path` =<br>
<br>
array (<br>
  'a' => 'b',<br>
  'd' => 'g',<br>
)<br>
<br>
= With `path` =<br>
<br>
array (<br>
  '?a' => 'b',<br>
  'd' => 'g',<br>
)<br>
<br>
Note the first key in the 'With `path`' example is wrongly prepended with<br>
`?`.<br>
<br>
My Nginx config appears to have been running fine for some time, but my<br>
instinct says there's either a `location` regex that I'm missing, or<br>
something else I've overlooked. I am, unfortunately, not smart enough to<br>
know what I'm doing wrong.<br>
<br>
I have included all my `location` blocks for this `server` so as not to<br>
trigger a conflict from another `location` block, the most relevant two are<br>
the last and second-to-last in the list.<br>
<br>
   location ^~ /.well-known/ {<br>
        allow all;<br>
        default_type "text/plain";<br>
        root /var/www/sites/<a href="http://example.com/subdomain/_well-known/" rel="noreferrer" target="_blank">example.com/subdomain/_well-known/</a>;<br>
        try_files $uri $uri/ =404;<br>
    }<br>
    location /favicon.ico {<br>
        access_log off;<br>
        log_not_found off;<br>
    }<br>
    location /robots.txt {<br>
        access_log off;<br>
        log_not_found off;<br>
    }<br>
    location ~ /\. {<br>
        deny all;<br>
    }<br>
    location ~ \.svg$ {<br>
        #redeclare `add_header` from parent, with modified `style-src` for<br>
SVG<br>
        set $csp_svg_1f173340 '';<br>
        set $csp_svg_1f173340 '${csp_svg_1f173340}default-src \'none\';';<br>
        set $csp_svg_1f173340 '${csp_svg_1f173340}frame-ancestors<br>
\'self\';';<br>
        set $csp_svg_1f173340 '${csp_svg_1f173340}style-src \'self\'<br>
\'unsafe-inline\';';<br>
        add_header Content-Security-Policy $csp_svg_1f173340;<br>
        add_header Referrer-Policy strict-origin;<br>
        add_header Strict-Transport-Security "max-age=31536000;<br>
includeSubDomains; preload";<br>
        add_header X-Content-Type-Options nosniff;<br>
        add_header X-Frame-Options SAMEORIGIN;<br>
        add_header X-XSS-Protection "1; mode=block";<br>
    }<br>
    location / {<br>
        index index.html index.php;<br>
        limit_except GET HEAD POST {<br>
            deny all;<br>
        }<br>
        try_files $uri $uri/ /index.php?$is_args$args;<br>
    }<br>
    location ~ ^.+\.php(?:/.*)?$ {<br>
        fastcgi_hide_header "X-Powered-By";<br>
        fastcgi_keep_conn on;<br>
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br>
        fastcgi_pass unix:/var/run/php/php-fpm74.sock;<br>
        fastcgi_split_path_info ^(.+\.php)(/.+)$;<br>
        include fastcgi_params;<br>
        try_files $uri =404;<br>
    }<br>
<br>
I would be grateful if you're able to have a look and see what I might be<br>
doing wrong. Any recommendations for further reading, or pointers to a<br>
'better' way of handling PHP in this situation are very gratefully<br>
received.<br>
<br>
Thank you in advance, and best wishes to you.<br>
<br>
Posted at Nginx Forum: <a href="https://forum.nginx.org/read.php?2,288165,288165#msg-288165" rel="noreferrer" target="_blank">https://forum.nginx.org/read.php?2,288165,288165#msg-288165</a><br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</blockquote></div>