[Techtalk] directory handling with apache server
John Clarke
johnc+linuxchix at kirriwa.net
Mon Oct 27 10:51:15 EST 2003
On Sun, Oct 26, 2003 at 04:48:48 -0800, Berenice Chong wrote:
> How does apache know that a requested url is a directory? Is it
> because of the trailing slash at the end? The FAQ says trailing
no. you can give it a directory url without a trailing slash and it'll
still work. the system call stat() can be used to find out whether a
give path is a file or directory (or symlink or socket or device or
fifo). see the stat man page for more detail.
> slashes are needed for relative URLs to work properly, but I don't
> understand why.
that's within a document, and the slash is needed for the browser to
build the correct url. if you type in the url:
http;//kirriwa.net/john
the server (apache) knows that /john is a directory, but the browser
doesn't. a relative url within /john/index.html, e.g.:
<p><a href="photos/index.html">Photos</a></p>
has to be converted into an absolute url by the browser. without a
trailing slash, it will strip "john" and add "photos/index.html",
giving "http://kirriwa.net/photos/index.html" which is incorrect, but
the browser doesn't know that because it has no idea that "/john" is a
directory.
fortunately, apache sends a redirection to the browser when "/john" is
fetched:
[johnc at dropbear ~]$ telnet kirriwa.net 80
Trying 203.63.21.216...
Connected to kirriwa.net.
Escape character is '^]'.
GET http://kirriwa.net/john HTTP/1.0
HTTP/1.0 301 Moved Permanently
Date: Sun, 26 Oct 2003 22:44:52 GMT
Server: Apache
Location: http://kirriwa.net/john/
[rest of reply snipped]
the browser then fetches the new url, this time with a trailing slash,
and can then build any relative urls correctly because it now knows that
"/john" is a directory.
hope this helps.
cheers,
john
--
whois !JC774-AU at whois.aunic.net
GPG key id: 0xD59C360F
http://kirriwa.net/john/
More information about the Techtalk
mailing list