nginx virtual directory redirect to a static file

Francis Daly francis at daoine.org
Thu Feb 4 09:53:34 UTC 2021


On Thu, Feb 04, 2021 at 03:07:27AM -0500, proj964 wrote:

Hi there,

> Perhaps this is something that can't be done with nginx, but I would like to
> have a url, 
> like http://localhost:nnn/abc return a file from q:/d1/qrst.txt.

I'm not certain, from the words here and in the Subject: line, but I
think you are asking for something like:

* request /abc/ returns the content of /tmp/thisfile.txt
* request /abc/anything returns the content of /tmp/thisfile.txt
(for any value of "anything")
* request /abcd does not return the content of /tmp/thisfile.txt
* request /abc either returns the content of /tmp/thisfile.txt, or maybe
returns a redirect to /abc/ (which then gets to item #1 again)

The first three of those can be done (assuming no overriding location)
with

  location ~ ^/abc/.* { alias /tmp/thisfile.txt; try_files "" =404; }

where the "=404" is just in case your file does not exist.

The fourth might be done with

  location = /abc { return 301 /abc/; }

You may also want to set default_type if what is there already does not
do what you want.

> I have tried many combinations of root, alias, rewrite, try_files in
> location.
> For everything I try, nginx inserts "abc" into the final absolute path

That should probably not happen with "alias". If you show the config,
the request, and the response, maybe it can be explained.

As it happens, I first thought that just

  location ~ ^/abc/.* { alias /tmp/thisfile.txt; }

would work, but the ngx_http_index_module handles requests ending in
/ before this config takes hold, so the extra "try_files" is used to
avoid that.

There may well be a better way.

Cheers,

	f
-- 
Francis Daly        francis at daoine.org


More information about the nginx mailing list