(обновлено, чтобы сделать его более читабельным)
Так должны работать относительные пути.
Предположим, что текущий адрес таков:
Абсолют: protocol://some.domain.name/dir1/dir2/filename
Если вы укажете только новое имя файла "foo", вы получите тот же протокол, host и 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/
ОБНОВЛЕНИЕ
Как Камерон сказано в комментарии: Для справки, см. Шаг 6 в разделе 4 RFC 1808