--- fnord-1.10-20090206fwb/httpd.c.slashredirect 2009-02-07 20:31:14.000000000 +0100 +++ fnord-1.10-20090206fwb/httpd.c 2009-02-07 20:32:12.000000000 +0100 @@ -830,6 +830,10 @@ return mktime(&x); } +static void redirectboilerplate() { + buffer_puts(buffer_1,"HTTP/1.0 301 Go Away\r\nConnection: close\r\nContent-Length: 0\r\nLocation: "); +} + static struct stat st; /* try to return a file */ @@ -838,6 +842,20 @@ char* accept; time_t ims; while (url[0]=='/') ++url; + if (stat(url,&st)==0) { + if (S_ISDIR(st.st_mode)) { + redirectboilerplate(); + buffer_puts(buffer_1,"http://"); + buffer_puts(buffer_1,host); + buffer_puts(buffer_1,"/"); + buffer_puts(buffer_1,url); + buffer_puts(buffer_1,"/\r\n\r\n"); + retcode=301; + dolog(0); + buffer_flush(buffer_1); + exit(0); + } + } getmimetype(url,explicit); { char *b=buf; @@ -892,10 +910,6 @@ return -1; } -static void redirectboilerplate() { - buffer_puts(buffer_1,"HTTP/1.0 301 Go Away\r\nConnection: close\r\nContent-Length: 0\r\nLocation: "); -} - static void handleredirect(const char *url,const char* origurl) { char symlink[1024]; int len;