Relative links are great; they let you move your whole tree of HTML
files from one place to another and still retain the internal link
structure.  However, they start to suffer when you have multiple
levels of directory structure: is that `href="../../style.css"` or
`href="../../../style.css"`?  It's a bit confusing, and even if you
don't get confused, you still have to modify links when you copy them
from one file to another.

What would be more helpful would be the ability to say "up to a
directory named foo".  Suppose you have this setup:

    kragen/
      index.html
      resume.html
      style/style.css
      images/
        kragenlogo.png
        headshot.jpg
      blog/
        1.html
        2.html
        archive/
          2008-03.html

Now, suppose there's some text in `2008-03.html` that was originally
in `2.html` or one of its siblings.  It would be nice if that text
didn't have to be changed from `<a href="1.html">` to `<a
href="../1.html">`.  You can write `<a href="/kragen/blog/1.html">`,
but in addition to being verbose, that makes it hard to use a tree of
HTML that you've downloaded with `wget -r` or something similar.

Suppose you could instead write `<a href="$blog/1.html">`, meaning "go
up until you find an ancestor directory named `blog`, then use its
children".  Now you can write things like `<img
src="$kragen/headshot.jpg">` freely, and copy and paste them among all
the files.

By itself, this would be a backwards-incompatible change to browsers
and the URL spec, but it could degrade gracefully.  You could program
your web server to generate redirects for backwards-compatibility,
while implementing the change in newer browsers.  Compatibility
problems would only arise if someone had a relative link to a
directory whose name began with "$" whose name otherwise duplicated
that of a directory higher up in the hierarchy.

Reply via email to