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)

Igor Sysoev is at rambler-co.ru
Thu Jun 18 12:21:58 MSD 2009


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

> 2009/6/18 Igor Sysoev <is at 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.


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list