Ответ 1
(обновлено, чтобы сделать его более читаемым)
Вот как должны работать относительные пути.
Притворись, что текущий адрес:
Абсолют: protocol://some.domain.name/dir1/dir2/filename
Если вы укажете только новое имя файла "foo", вы получите тот же протокол, хост и dirs, изменится только имя файла:
Относительный: foo
Абсолют: protocol://some.domain.name/dir1/dir2/foo
Если вы укажете весь путь "/dir3/filename2", вы получите тот же протокол и имя хоста, но с другим путем:
Относительный: /dir3/filename2
Абсолют: protocol://some.domain.name/dir3/filename2
Вы также можете указать имя хоста "//another.domain.name/dir5/filename3" и получить тот же протокол, кроме другого хоста, dir и имя файла:
Относительный: //another.domain.name/dir5/filename3
Абсолют: protocol://another.domain.name/dir5/filename3
Что может сбить с толку, так это то, что веб-сервер внутри может добавлять/в конец URL-адреса, если указанный URL-адрес указывает на каталог, а не на файл.
protocol://some.domain.name/somename
Если "somename" - это каталог, веб-сервер может перевести его (возможно с перенаправлением)
protocol://some.domain.name/somename/
UPDATE
Как cameron сказано в комментарии: Для справки см. шаг 6 в разделе 4 RFC 1808