Opened 7 years ago

Closed 7 years ago

#668 closed defect (invalid)

location with spaces in URI + alias fails

Reported by: https://stackoverflow.com/users/573152/bernard-rosset Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.6.x
Keywords: Cc:
uname -a: Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.6.2
built by gcc 4.7.2 (Debian 4.7.2-5)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6

Description

When using the following configuration:

location "/here you go/" {
    alias "/foobar";
}

Hitting http://example.org/here you go/ fails with the following error:

opendir() "/fooba" failed (2: No such file or directory)

However, using the following configuration (same, without the ending slash):

location "/here you go" {
    alias "/foobar";
}

Everything works perfectly.

Change History (2)

comment:1 by https://stackoverflow.com/users/573152/bernard-rosset, 7 years ago

The URL was badly parsed: http://example.org/here you go/ or http://example.org/here%20you%20go/

comment:2 by Maxim Dounin, 7 years ago

Resolution: invalid
Status: newclosed

This is a result of how alias works (it just replaces matching part of the URI) and how nginx works with directory indexes (it just drops the last character of the file name if URI ends with "/"). Fix is to add a trailing "/" to the path in "alias" if you are aliasing a directory:

    location /uri/ {
        alias /path/to/dir/;
    }

Not at all related to spaces.

Note: See TracTickets for help on using tickets.