try_files for alias
Igor Sysoev
is at rambler-co.ru
Thu Jun 18 18:10:37 MSD 2009
On Wed, Jun 17, 2009 at 09:57:41AM +0700, Edho P Arief wrote:
> How do I make this work?
>
> location ~ /~someapp(.*)$ { alias /home/someapp/root$1; try_files $uri
> /~someapp/err404.htm; }
>
> The try_files never catch the $uri (nor $1) and returns 500 (redirection cycle)
>
> Am I 'forced' to use error_page in this case?
>
> This works:
>
> location ~ /~someapp(.*)$ { alias /home/someapp/root$1; error_page 404
> /~someapp/err404.htm; }
>
> and without regex the error_page and try_files seem to be completely ignored:
> neither
> location /~someapp/ { alias /home/someapp/root/; error_page 404
> /~someapp/err404.htm; }
> nor
> location /~someapp/ { alias /home/someapp/root/; try_files $uri
> /~someapp/err404.htm; }
> works.
If request is "/~someapp/one", then this location
location /~someapp/ {
alias /home/someapp/root/;
try_files $uri /~someapp/err404.htm;
}
will test /home/someapp/root/one existence.
As to
location ~ /~someapp(.*)$ {
alias /home/someapp/root$1;
try_files $uri /~someapp/err404.htm;
}
this "alias" with captures is special case.
A "root" is always just prefix to URI and "try_files" tests "root$uri".
An "alias" without captures replaces location part in URI with
the "alias" value, and "try_files" tests "alias/modified_uri"
An "alias" with captures replaces a whole URI with the "alias" value,
and "try_files" tests "alias/$uri", and $uri is surpplus here.
You need just to pass empty value to "try_files":
location ~ /~someapp(.*)$ {
alias /home/someapp/root$1;
try_files "" /~someapp/err404.htm;
}
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list