Hi Fritz,
Um deep links zu unterbinden, müsste ich in jedem Fall zuerst per
Deny from all
alle direkten Aufrufe der URL verbieten.
Oder, noch schöner (falls dein Provider es dir ermöglicht), die Dateien direkt außerhalb des DocumentRoot speichern.
Dann hat nur noch PHP Zugriff (richtig?)
Und Perl, und Python, und jedes andere Programm auf dem Server, welches Leserechte auf die Datei hat. Die Apache-Konfiguration bezieht sich natürlich nur auf Clients, die über HTTP mit dem Apache kommunizieren und diese Ressource abrufen wollen - und dass du dies verbietest reicht in deinem Fall ja auch.
Aber wie geht es dann weiter? Wie kann Session Management mir weiterhelfen?
Beispiel:
-- linkSeite.php --
<?php
[link:http://de3.php.net/manual/en/function.session-start.php@title=session_start]();
$_SESSION['hatLinkSeiteGesehen'] = true;
?>
<!DOCTYPE [...]>
<!-- HTML-Seite mit Link auf downloadSeite.php -->
-- downloadSeite.php --
<?php
[link:http://de3.php.net/manual/en/function.session-start.php@title=session_start]();
if(isset($_SESSION['hatLinkSeiteGesehen']) AND $_SESSION['hatLinkSeiteGesehen'] == true) {
[link:http://de3.php.net/manual/en/function.header.php@title=header]('Content-Type: application/zip');
[link:http://de3.php.net/manual/en/function.header.php@title=header]('Content-Disposition: attachment;filename=datei.zip');
// file_get_contents() soll angeblich schneller sein als readfile()
echo [link:http://de3.php.net/manual/en/function.file-get-contents.php@title=file_get_contents]('pfad/zu/datei.zip');
}
else {
echo 'Böser Bub!! Guck dir erst die linkSeite an ;-)';
}
Erläuterung:
Du hast weiterhin deine normale Seite mit dem Link zum Download. Den Download-Link passt du auf ein Download-Script an (also nicht direkt auf die zip-Datei wie bisher). In der Seite mit dem Download-Link speicherst du dann in der Session, dass der Besucher diese Seite besucht hat und im Download-Script prüfst du dann eben diesen Wert aus der Session erneut.
Viele Grüße,
~ Dennis.