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.
In the page I linked there's also block for php (which can't be
handled using alias).
Yes, php handling should more complex.