location regular expression not filtering some characters

Francis Daly francis at daoine.org
Tue Jun 19 18:13:10 UTC 2012

On Tue, Jun 19, 2012 at 01:07:17PM -0400, CM Fields wrote:

Hi there,

>    http://example.com/data/12#34.txt
>           and cuts off the pound sign and anything after it to this....
>    http://example.com/data/12

The client probably should not send the # or anything after it, as it
is the local "fragment" part of the url. nginx is right to ignore it,
if it present. If you want a # in a url, it must be %-encoded.

>    http://example.com/data/12?34.txt
>        get passed through the regular expression unchanged
>    http://example.com/data/12?34.txt
> Not sure why the question mark is special yet.

The ? marks the start of the query_string part of the url. If you want
a literal ? in a url, it must be %-encoded.

In practice, the query_string is usually an unordered set of key/value
pairs. The choice nginx makes is not to consider the query_string when
determining which location{} is the best fit.

You can test variables with names that include "arg" if you want to see
what query_string was provided -- but you can't do it as part of the
location directive.


Francis Daly        francis at daoine.org

More information about the nginx mailing list