atom feed14 messages in ru.sysoev.nginxRe: Error with config when upgrading ...
FromSent OnAttachments
Jools WillsJun 17, 2009 3:37 pm 
Edho P AriefJun 17, 2009 7:33 pm 
Jools WillsJun 17, 2009 11:43 pm 
Edho P AriefJun 18, 2009 12:08 am 
Igor SysoevJun 18, 2009 12:40 am 
Edho P AriefJun 18, 2009 1:13 am 
Igor SysoevJun 18, 2009 1:21 am 
Edho P AriefJun 18, 2009 1:39 am 
Igor SysoevJun 18, 2009 1:46 am 
Jools WillsJun 18, 2009 4:17 am 
Jools WillsJun 18, 2009 4:21 am 
Igor SysoevJun 18, 2009 4:33 am 
Jools WillsJun 20, 2009 8:27 am 
Igor SysoevJun 20, 2009 8:37 am 
Subject:Re: Error with config when upgrading from 0.6.34 to 0.7.59 (the "alias" directive must use captures inside location given by regular expression)
From:Igor Sysoev (is@rambler-co.ru)
Date:Jun 18, 2009 1:21:35 am
List:ru.sysoev.nginx

On Thu, Jun 18, 2009 at 03:13:43PM +0700, Edho P Arief wrote:

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

On Wed, Jun 17, 2009 at 11:37:58PM +0100, Jools Wills wrote:

I got an error

the "alias" directive must use captures inside location given by regular expression in /etc/nginx/sites-enabled/default:70

Quite a confusing message for me. The line in question.

alias /home/$homedir/public_html/;

which comes from

# For requests starting with a tilde, break them into three components: # 1. The username, everything after the tilde up to the first slash # 2. The file location, everything after the username up to the last slash # 3. The trailing slash(es) # Then, rewrite to go to the f~/ branch. location /~ {     if ($request_uri ~ ^/~([^/]*)(/.*[^/]|)(/*)$) {         set $homedir $1;         set $filedir $2;         set $trailingslashes $3;         rewrite ^/~([^/]*)(/|$)(.*)$ f~/$3;     } }

# Here, the user-directory components have been parsed. Use an alias to set # the file directory prefix. But if the file at the requested URI is a # directory, we jump to the ~/ branch for additional processing. location f~/ {     alias /home/$homedir/public_html/;     if (-d /home/$homedir/public_html$filedir) {         rewrite ^f~/(.*) ~/$1;     } }

# Here, the request is for a directory in a user's home directory. We check # that the request URI contained trailing slashes. If it did not, then we # add the slashes and send a redirect. This circumvents Nginx's faulty # internal slash-adding mechanism. location ~/ {     autoindex on;     alias /home/$homedir/public_html/;     if ($trailingslashes = "") {         rewrite .* /~$homedir$filedir/ redirect;     } }

(this code comes from this blog http://blog.sbf5.com/?p=6)

Any ideas what this new error means. Seems related to a "new" feature added in 0.7.40.

You should use just:

 locaiton ~ ^/~([^/]+)(/?.*)$) {

location ~ ^/~([^/]+)(/?.*)$

why use (/?.*) ? wouldn't ^/~([^/]+)(.*)$ work as well?

Probably, your regex will be enough.

     alias /home/$1/public_html/$2;

is there behavior difference between alias /home/$1/public_html/$2; and alias /home/$1/public_html$2; ?

Yes, you are right.

     autoindex on;  }

In the page I linked there's also block for php (which can't be handled using alias).

Yes, php handling should more complex.