8 messages in ru.sysoev.nginxRe: try_files for alias
FromSent OnAttachments
Edho P AriefJun 16, 2009 7:57 pm 
Edho P AriefJun 16, 2009 8:35 pm 
Edho P AriefJun 18, 2009 6:07 am 
Igor SysoevJun 18, 2009 7:10 am 
Edho P AriefJun 18, 2009 7:40 am 
Edho P AriefJun 19, 2009 1:30 am 
Edho P AriefJun 19, 2009 1:33 am 
Edho P AriefJun 19, 2009 7:51 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: try_files for aliasActions...
From:Edho P Arief (edho@gmail.com)
Date:Jun 19, 2009 1:33:09 am
List:ru.sysoev.nginx

2009/6/18 Igor Sysoev <is@rambler-co.ru>:

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;    }

I just noticed it doesn't work properly (bug?)                location ~ ^/\~([^/]+)(.*\.php)$ {                        alias /home/$1/public_html$2;                        try_files "" @404;                        include php_params;                }                location ~ ^/\~([^/]+)(.*)$ {                        alias /home/$1/public_html$2;                        try_files "" @404;                }

php_params: fastcgi_pass 127.0.0.1:8000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params;

from phpinfo():

_SERVER["SCRIPT_NAME"]  ^/\~([^/]+)(.*\.php)$ _SERVER["REQUEST_URI"]  /~edho/ _SERVER["DOCUMENT_URI"] ^/\~([^/]+)(.*\.php)$

...still in regex form?

as for static file, it always returned with mime type of application/octet-stream ( http://pastebin.com/m7d2c8f6e )

full config: http://pastebin.com/m2be37d60