Schützen Sie PDF-Dokumente vor dem direkten Zugriff über URL

Ich möchte eine PDF-Datei davor schützen, direkt verlinkt zu werden, aber stattdessen möchten meine angemeldeten Benutzer darauf zugreifen können. Ich habe einen Link, der derzeit zu einer Javascript-Funktion führt, die ein Formular veröffentlicht: $ ('nameofdoc'). SetProperty ('value', doc); document.getElementById ('sendme'). submit ();

Dabei ist sendme der Name des Formulars und nameof doc der Index des Dokuments, das ich anzeigen möchte.

Dies geht dann zu einer PHP-Datei:

 $docpath = $holdingArray[0].$holdingArray[1];

 $file = $holdingArray[0]; //file name
 $filename = $holdingArray[1]; //path to the file]
 header( 'Location:'.$docpath ) ;
 header('Content-type: application/pdf');
 header('Content-Disposition: attachment; filename="'.$filename  . '"');
 readfile($filename)

Dies alles funktioniert gut, es lädt die Datei und gibt das PDF aus. Was ich nicht tun kann, ist das Verzeichnis vor direkter Verlinkung zu schützen - zB www.mydomain.com/pathToPdf/pdfname.pdf

Ich habe darüber nachgedacht, das Verzeichnis mit .htaccess zu schützen, aber es befindet sich auf einem gemeinsam genutzten Host, daher bin ich mir über die Sicherheit nicht sicher, und trotzdem kann ich es nicht zum Laufen bringen, wenn ich es versucht habe.

Jede Hilfe wäre großartig, da dies mein vierter Tag ist, an dem ich versuche, dies zu beheben.

Vielen Dank

Aktualisieren

Ich hatte viel Hilfe, danke, aber ich bin noch nicht ganz da.

Ich habe eine .htaccess-Datei, die jetzt eine andere PHP-Datei startet, wenn ein PDF aus dem Verzeichnis angefordert wird:

 RewriteEngine on
 RewriteRule ^(.*).(pdf)$ fileopen.php

Wenn die Datei fileopen.php startet, kann die PDF-Datei nicht geöffnet werden

 $path = $_SERVER['REQUEST_URI'];
 $paths = explode('/', $path);
 $lastIndex = count($paths) - 1;
 $fileName = $paths[$lastIndex]; 

 $file = basename($path);

 $filepath = $path;

 if (file_exists($file)) {
     header( 'Location: http://www.mydomain.com'.$path ) ;
     header("Content-type: application/pdf");
     header("Content-Disposition: attachment; filename=".$file);
     readfile($filepath);

 }else{
     echo "file not found using path ".$path." and file is ".$file;
 }

Die Ausgabe ist Datei nicht gefunden mit Pfad /documents/6/Doc1.pdf und Datei ist Doc1.pdf

aber die datei existiert und befindet sich in diesem verzeichnis - irgendwelche ideen ??

Okay, ich bin froh zu berichten, dass Jaroslav mir wirklich geholfen hat, das Problem zu lösen. Seine Methode funktioniert gut, aber es ist schwierig, das gesamte Verzeichnismaterial in eine Reihe zu bringen. Am Ende habe ich ein paar Stunden damit verbracht, mit Kombinationen zu spielen, um es zum Laufen zu bringen, aber das Prinzip, das er gegeben hat, funktioniert gut. Vielen Dank

Antworten auf die Frage(3)

Ihre Antwort auf die Frage