Cache nachträglich umgehen?

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

Cache nachträglich umgehen?

Beitragvon Erik » 29.09.2007 21:22

Hallo,

Thema Traffic-Klau: Den Seiten von denen meine Bilder direkt verlinkt werden schiebe ich per .htaccess ein Ersatzbild unter, mit der Aufforderung den Link zu entfernen. Funktioniert soweit hervorragend und die Liste der entsprechenden Domains wächst (leider).

Dummerweise bekommt ein User das entsprechende Bild nur zu sehen, wenn er das Originalbild nicht mehr im Cache hat, und das ist beim Betreiber der Seite (der das Ersatzbild ja hauptsächlich sehen sollte) anscheinend oft der Fall.

Gibt es eine Möglichkeit, das zu vermeiden, z.B. durch Senden entsprechender Statuscode oder header-Information oder schaut der Client prinzipiell erst wieder ob sich was geändert hat, nachdem der Cache expired ist?

Könnte u.U. ein PHP-Image-Handler Abhilfe schaffen, der prinzipiell eingeschaltet wird wenn der Referer nicht die eigene Seite ist und vor dem eigentlichen Bild
Code: Alles auswählen
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

ausgibt? Wenn das funktioniert, würden Direktlinks immer zu einem Nachladen von der eigenen Seite führen und so das Ersatzbild schneller sichtbar machen.

MfG
Erik Krause
Erik
.
.
 
Beiträge: 25
Registriert: 28.03.2006 16:30
Wohnort: Freiburg

Re: Cache nachträglich umgehen?

Beitragvon Erik » 30.09.2007 20:02

Erik hat geschrieben:Hallo,
Könnte u.U. ein PHP-Image-Handler Abhilfe schaffen, der prinzipiell eingeschaltet wird wenn der Referer nicht die eigene Seite ist und vor dem eigentlichen Bild
Code: Alles auswählen
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

ausgibt? Wenn das funktioniert, würden Direktlinks immer zu einem Nachladen von der eigenen Seite führen und so das Ersatzbild schneller sichtbar machen.


So, ich hab das jetzt mal ausprobiert und es scheint zu funktionieren. In der .htaccess steht:
Code: Alles auswählen
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?erik-krause\.de(/.*)?$ [NC]
RewriteRule ^(.*)\.(jpg|jpeg|gif|png)$ http://www.erik-krause.de/bilderhandler.php?file=$1.$2 [L]


in bilderhandler.php steht:
Code: Alles auswählen
    // erst mal schauen...
    if (!is_file($file)) {
      header("HTTP/1.0 404 Not Found");
      die();
    }
    // Ein paar Daten ermitteln
    $len = filesize($file);
    $filename = basename($file);
    $file_extension = strtolower(substr(strrchr($filename,"."),1));
    // Je nach Extension content-type bestimmen
    switch( $file_extension ) {
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpeg"; break;
    }
    // header senden
    header("Content-Type: $ctype");
    header("Content-Disposition: inline; filename=$filename");
    // Kein caching!
    header("Cache-Control: no-cache, must-revalidate");
    // Datum in der Vergangenheit
    header("Expires: Mon, 21 Jul 1997 05:00:00 GMT");
    // ...und eigentliche Datei ausgeben
    readfile($file);


Gibt es dagegen irgendwelche Bedenken? Szenarien wo das nicht funktioniert? Sicherheitslücken?

MfG
Erik
Erik
.
.
 
Beiträge: 25
Registriert: 28.03.2006 16:30
Wohnort: Freiburg


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron