забыл слэш в конце url получил сусанин-autoindex

itcod nginx-forum at nginx.us
Thu Apr 23 19:18:56 UTC 2015


Добрый день уважаемые!
Столкнулся с странным поведением толи браузеров... толи autoindex в
location... толи своими кривыми ручками.... Странность проявляется в
различном отображении путей ссылок (нижняя строка браузера) при наведении на
ссылку в листинге autoindex. Проявляется при отсутствии закрывающего слэша в
url
Можете взлянуть вживую
пример правильного поведения: http://ihome.itcod.com/max/projects/ 
пример неправильного поведения: http://ihome.itcod.com/max/projects 
(СЛЭШ ЗАКРЫВАЮЩИЙ ЗАБЫЛ:))

В обоих случаях страница формируется вроде одинаковая... не увидел
разницы...
<html>
<head><title>Index of /max/projects//</title></head>
<body bgcolor="white">
<h1>Index of /max/projects//</h1><hr><pre><a href="../">../</a>
<a href="auth-dav/">auth-dav/</a>                                         
23-Apr-2015 18:31                   -
<a href="itcod/">itcod/</a>                                            
21-Apr-2015 10:32                   -
</pre><hr></body>
</html>

Но если навести на ссылку auth-dav (если слеш забыли в конце) и посмотреть
внизу куда ведёт путь... то увидим что "project" отрезан и нам предлагается
перейти на http://ihome.itcod.com/max/auth-dav/  Собственно в никуда она и
ведёт... ведь правильно это http://ihome.itcod.com/max/projects/auth-dav/

Кто слопал project при потеряном слэше? как его вернуть при потеряном
слэше?

Проверял в браузерах Opera и SeaMonkey

server {
listen       80;
server_name  dav.example.com;
server_name_in_redirect off;
access_log /var/log/nginx/dav.example.com-access.log main;
#resolver 10.255.255.1 [::1]:5353;
charset utf-8;

set $dir /opt/home;
set $testdir $dir$uri;
set $uri_type none;
if (-d $testdir) {
set $uri_type dir;
rewrite ^(.*)$ $1/;
rewrite ^(.*)/+$ $1/;
}
if (-f $testdir) {
set $uri_type file;
}
if ($request_method = "MKCOL") {
rewrite ^(.*)$ $1/;
rewrite ^(.*)/+$ $1/;
set $uri_type dir;
}
set $sadm_passwd .uhtpsw;
set $user_passwd .htpasswd; #user:password[crypt(3)/md5/sha1]
set $user_permit .htpermit; #user:GET,PUT,....OPTIONS
set $user_permit_default GET,PROPFIND,OPTIONS; # Allow

merge_slashes on;

location / {
access_by_lua_file /etc/nginx/lua/auth-dav.lua;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access user:rw group:rw;
client_body_temp_path /opt/itcod-dav.tmp/;
client_max_body_size 0;
autoindex on;
    root $dir;

}
location ~/\.uht {
deny all;
}

}

авторизатор auth-dav.lua если потребуется тут
http://ihome.itcod.com/max/projects/auth-dav/

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,258337,258337#msg-258337



Подробная информация о списке рассылки nginx-ru