try_files and GET variables

Igor Sysoev is at rambler-co.ru
Mon Mar 30 18:17:14 MSD 2009


On Mon, Mar 30, 2009 at 04:47:21PM +0300, Reinis Rozitis wrote:

> Hello,
> tried to replace the webserver config to use try_files instead of rewrites 
> (on 0.7.46), it kinda works but I get some garbage in QUERY_STRING on the 
> php fastcgi backend - so php doesnt see any GET variable.
> 
> 
> The config is simple:
> 
> location /tmp {
>    try_files $uri /index.php;
> }
> 
> 
> When I open http://myserver/tmp/?var=1  and dump the $_SERVER variables 
> 'REQUEST_URI' is correct -  '/tmp/?var=1' but QUERY_STRING gets something 
> like 'H??H=???' (non-printable chars)
> 
> 
> 
> 
> If I change the nginx config to named location everything works as expected 
> (all the GET variables are passed and QUERY_STRING is correct):
> 
> location /tmp {
>    try_files $uri @tmp;
> }
> 
> location @tmp{
>              fastcgi_pass   127.0.0.1:1026;
>              fastcgi_index  index.php;
>             include        fastcgi_params;
>             fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
> }
> 
> 
> Where is the catch?

The attached patch fixes the bug.


-- 
Igor Sysoev
http://sysoev.ru/en/
-------------- next part --------------
Index: src/http/ngx_http_parse.c
===================================================================
--- src/http/ngx_http_parse.c	(revision 1944)
+++ src/http/ngx_http_parse.c	(revision 1945)
@@ -1534,6 +1534,8 @@
 
     last = p + uri->len;
 
+    args->len = 0;
+
     while (p < last) {
 
         ch = *p++;


More information about the nginx mailing list