Unexpected value of $request_uri in an SSI subrequest.

xgdlm grangier at gmail.com
Mon Apr 20 09:46:24 MSD 2009


Hello all,

It seems that the $request_uri in a location used by a ssi virtual  
subrequest is set to the location that issue the SSI call, whereas the  
$uri is the value of the SSI subrequest URL.
I don't know if this is a bug or a wanted behaviour

In this dummy test case this is not relevant, but with memcache and  
using $request_uri to generate the key, this make an infinite loop.

<html>
<!--# include virtual="/ssi/$userid/" -->
</html>

Here is a dummy configuration to test :

location / {
	ssi on;
	set $memcached_key $request_uri;
	default_type text/html;
	memcached_pass 10.0.0.177:11211;
	error_page 404 = @cache_miss;
	error_page 502 = @cache_miss;	
}

location /test/ {
	return 404;
}

location ~ "/head/([0-9]{1,})/" {
	#rewrite (.*) /test/?$uri;
	rewrite (.*) /test/?$request_uri;
}

- Using rewrite (.*) /test/?$request_uri args: are set to the location  
"/":
2009/04/20 07:34:49 [notice] 32342#0: *1 rewritten data: "/test/",  
args: "/webstats/2009/4/", client: 10.0.0.177, server: dummy.net,  
request: "GET /webstats/2009/4/ HTTP/1.0"

- Using rewrite (.*) /test/?$uri args: are set to the location "/ 
head..." as expected:
2009/04/20 07:35:57 [notice] 32494#0: *1 rewritten data: "/test/",  
args: "/head/69/", client: 10.0.0.177, server: dummy.net, request:  
"GET /webstats/2009/4/ HTTP/1.0"

Regards,

xav





More information about the nginx mailing list