try_files doubleslash mystery

Francis Daly francis at
Sat Aug 17 18:04:23 UTC 2019

On Sat, Aug 17, 2019 at 10:23:46AM +0200, Maik Beckmann via nginx wrote:

Hi there,

>         location  /blog {
>             root "blog-public";
>             set $foo /;
>             try_files $foo $foo/ $foo/index.html =404;
>         }

> When requesting / via curl, we get "Hompage" as expected.  However, if we
> request /blog/ we get "Homepage as well. 

> Now my Question:  Is there something about double slash as the $uri that
> causes nginx to do a magical internal redirect?  I don't understand.

It is not "double slash". It is "the argument to try files (before
variable expansion) ends in slash".

The path to a file is constructed from the file parameter according to
the root and alias directives. It is possible to check directory’s
existence by specifying a slash at the end of a name, e.g. “$uri/”.

$foo does not end in slash, so try_files looks for a file of that
(expanded) name, and fails to find it.

$foo/ does end in slash, so try_files looks for a directory of that
(expanded) name, and finds it and serves it (which involves a
subrequest/internal redirect).

Francis Daly        francis at

More information about the nginx mailing list