Kevin schreibt im
Eine CSS-Datei hat etwas wie...
background:url(../images/topheader.htm) top left no-repeat;
...wobei topheader.htm nur eine leere Datei ist. Im selben Verzeichnis befindet sich eine JPG-Datei namens topheader.jpg. Wie funktioniert das? Warum wird es so gemacht?
Ja, das habe ich schon mal gesehen. Ich habe keine Ahnung, wie es funktioniert oder warum es so gemacht wird. Ich habe versucht, diese Technik in meinem geheimen Labor zu reproduzieren und konnte sie nicht zum Laufen bringen.
Ich habe schon einmal Bildpfade in HTML-Dateien gesehen, die auf PHP-Dateien verweisen, wie bei der alten Random Image-Technik mit folgendem Code
<img src="/path/to/images/rotate.php" />
Aber das ergibt für mich Sinn – das Skript gibt einen Dateipfad zurück. Das hier ist nur eine leere HTML-Datei...
Passiert hier eine serverseitige Skripting? Hat das schon mal jemand gesehen? Weiß jemand, worum es dabei geht?
Sieht für mich nach Apache Rewrite-Direktiven aus. Die leere htm-Datei ist nur eine falsche Fährte.
Es gibt Module/Konfigurationen, die es einem Webserver ermöglichen, eine andere Datei zu liefern, wenn er die angeforderte nicht finden kann. Soweit ich gesehen habe, liefert der Server eine Datei, die dem angeforderten Dateinamen am nächsten kommt.
Beispiel: Der Browser fordert file1.htm an, findet sie aber nicht in diesem Verzeichnis. Der Server findet die Datei file1.jpg und liefert diese stattdessen. Der Server versucht, 404-Fehler zu minimieren.
Das gefällt mir persönlich nicht, da es schludriges Programmieren fördert und Kopfschmerzen bei der Fehlersuche verursachen kann.
Ich muss WC zustimmen. Mit mod_rewrite könnte „/images/topheader.htm“ buchstäblich zu jedem serverseitigen Skript schreiben.
Ja, WC hat Recht – mit einer URL zu der Seite, die das tut, wäre es einfacher, sicher zu sagen
Das sind gangbare Wege, um diese Konfiguration zum Laufen zu bringen, aber mit diesen Beispielen gibt es keinen Grund, dies zu tun, außer vielleicht, um Hotlinking des Bildes zu vermeiden.
Was ist der Kontext?
Ich stimme Paul zu.
Ich nehme an, die htm-Datei ist nicht leer, sondern es handelt sich möglicherweise um ein serverseitiges Skript. Eine leere Datei wird an den Client zurückgegeben.
Meiner Meinung nach wäre es nicht sinnvoll, die Rewrite-Engine auf diese Weise zu verwenden. Das Einzige, was für mich Sinn ergibt, ist ein Skript, das z. B. den Referrer prüft, um Hotlinking zu vermeiden, oder andere Verarbeitungen durchführt und eine leere Datei zurückgibt, wenn eine Bedingung erfüllt ist (oder nicht).
Tolle Antworten, alle zusammen, danke!
Ich werde Kevin fragen, ob er einen Link zu der betreffenden URL hat. Wie ich sagte, ich weiß, dass ich es schon einmal gesehen habe, aber ich kann mir im Moment keinen Link dazu merken.
Die Antwort zeichnet sich hier ab. Bisher haben wir festgestellt, dass die HTML-Datei sehr wahrscheinlich NICHT leer ist, sondern ein Skript irgendeiner Art enthält, das einfach nicht sichtbar ist, wenn man es aufruft, um es in einem Browser anzuzeigen. Dieses Skript gibt wahrscheinlich einen Dateipfad zum Bild zurück, wenn bestimmte Bedingungen erfüllt sind.
Das Verhindern von Hotlinking macht für mich keinen Sinn. Da sich das innerhalb einer CSS-Datei befindet, wie kann der Referrer etwas anderes sein als die gleiche Website? Es sei denn, die CSS-Datei wurde gestohlen und versucht, auf einer fremden Website verwendet zu werden, nehme ich an.
Mein erster Impuls ist, eine Nutzung von mod_rewrite oder einer Redirect-Anweisung anzunehmen, aber wenn das der Fall wäre, würde dann nicht das direkte Aufrufen der Seite diese Anweisung trotzdem auslösen?
Zum Beispiel:
redirect 301 /images/top.html http://images.somedomain.com/top.gifWenn Sie Ihren Browser auf /images/top.html umleiten würden, sollte er immer noch zu images.somedomain.com/top.gif weitergeleitet werden, oder? Dafür sind HTTP-Redirect-Codes da: um dem Browser zu sagen, dass er woanders hingehen soll.
Das ist aber ziemlich verrückt... Ich vermute, man könnte eine Umleitung vornehmen, um es an eine andere Datei weiterzuleiten, mit einigen Daten darüber, von welcher Seite es aufgerufen wurde oder so etwas... aber das scheint ziemlich kompliziert zu sein, und ich sehe keinen Wert darin.
Also ja, ich bin mir nicht sicher, wie oder sogar warum.
Skripte wie rotate.php geben keinen Dateipfad zurück, sie geben den tatsächlichen Bilddatenstrom zurück, der vom Browser als Bild angesehen wird – serverseitig kann das Bild eine tatsächliche Datei sein oder von dem Skript im laufenden Betrieb erstellt werden.
Einige Server sind auch so konfiguriert, dass sie HTML-Dateien als PHP-Dateien parsen (nicht effizient, aber machbar).
Davon abgesehen kenne ich die Antwort auf Ihre Frage nicht!
Ich habe so etwas gemacht und es ist einfach mit serverseitigem Skripting und entweder einem Rewrite-Modul wie mod_rewrite oder isapi_rewrite – die andere Alternative ist die Zuordnung von *.* in IIS zu asp
Alles, was Sie in der serverseitigen Skriptsprache, die Sie verwenden, tun müssen, ist, die Variable http_referer zu überprüfen. Sie können dann feststellen, ob Sie ein Bild, nichts oder sogar ein Bild senden sollen, das besagt: "Sie haben keine Berechtigung, diese Datei anzuzeigen", basierend darauf, woher der Benutzer kam.
Ich habe ein Skript auf meiner Website laufen, das die verweisende Domain gegen eine Liste registrierter Domainnamen abgleicht, um zu sehen, ob jemand meine Software verwendet, die ich nicht kenne. Dieses Skript entscheidet dann, ob es ein rotes Bild mit der Aufschrift "nicht registriert" oder ein weißes Bild mit der Aufschrift "registriert" zurückgibt.
ist Teil eines Skripts, das Bilder bei jedem Aktualisieren rotiert. Das Ganze ist hier verfügbar: http://www.alistapart.com/articles/randomizer/
Das, das auf eine php-Datei verweist, ist wahrscheinlich ein Skript, das entweder ein Bild mit der GD-Bibliothek von PHP erstellt (einer Coding-Bibliothek für Bildmanipulation und -erstellung). Das PHP setzt die Header der Datei auf die einer Bilddatei, sodass HTML/Browser nicht einmal merkt, dass das, was es aufruft, kein Bild ist.