Nein, die Datei (das Bild) oder das Programm/CGI/... "muß" nicht im öffentlichen
HTML-DokumenteVerzeichnis liegen.
Sie muß nur dort liegen, wo z.B. der Apache sie aufrufen kann, bzw. wo dein Programm drauf zugriff hat. (viele WebSpaces haben extra ein Unterverzeichnis, welches nicht öffentlich erreichbar ist)
Bezüglich der "
URL", da ist serverintern natürlich nur die Pfadangabe von nöten.
Mit der Domain wird der Server angesprochen und intern geht es dann mit dem Pfad-Anteil weiter.
Aber man kann die Domain dennoch auslesen, wenn man sie unbedingt braucht, um z.B. unterschiedlich zu reagieren, wenn der selbe WebServer mit mehreren Domains/SubDomains verlinkt ist.
Und bei diesen zusammengesetzen Pfaden, also wenn man "Sub-Pfade" erlaubt, sollte man dringend die Pfade validieren,
denn sonst kann sich da jemand schön zugriff auf Dateien verschaffen, die eigentlich nicht öffentlich sind.
z.B.
<img src="/Images/background/bgblue.jpg"/>
oder
<img src="www.domain.de/Images/background/bgblue.jpg"/>
sind ja kein Problem, bzw. die URLs direkt im Browser aufgerufen.
Aber so Dinge wie
/../../geheimesverzeichnis/passwörter.txt
oder
/index.php
liefern dann Dateien im Klartext aus, die man nicht draußen haben wollte.