Frage

Hallo ich versuche die Umleitung aller links zu einer pdf-Datei in meine Website eine Seite mit einem Formular in der es sammelt user info, bevor Sie fortfahren können herunterladen/anzeigen des pdf -.

Eg

Ich will redirect *.pdf-Dateien in web-site anfordern.php?Datei=name_of_pdf_being_redirected

Wo request.php ist die Seite mit dem Formular zu Fragen, für ein paar details, bevor Sie fortfahren.

Alle pdf-Dateien in die Website sind, die statt in /pdf-Ordner.

Irgendwelche Ideen?

EDIT:sorry, ich bin mit Apache auf dem server.

OK, ICH BIN ES IMMER:Ich habe es jetzt funktioniert mit:

RewriteEngine on RewriteRule ^pdf/(.+.pdf)$ request.php?file=/$1 [R]

Aber jetzt, wenn es auf der download-Seite, wenn ich möchten, lassen Sie die person, die tatsächlich die Datei herunterladen, meine neue Regel ist spucken den download-link zurück zu der form :-P haha also es ist trotzdem lassen es die Datei herunterladen, sobald das Formular abgesendet wurde und du bist auf download.php?

War es hilfreich?

Lösung

Sie können versuchen, diese:

  • Verschieben Sie Ihre Dateien in einen Ordner "außerhalb" Ihrer web-root, so dass niemand Zugriff auf Sie durch ein browser
  • Verwenden Sie Sitzungen, um zu erkennen, ob eine person das Formular ausgefüllt hat oder nicht
  • Verwenden Sie ein php-powered-Datei-download-Skript.In seiner naivest form, es könnte wie folgt Aussehen:
    if ( isset( $_SESSION[ 'OK_TO_DOWNLOAD' ] ) == false )
    {
        header( "Location: must_fill_this_first.php" );
        exit( 0 );
    }

    header( "Content-type: application/pdf" );
    // double check the above, google it as i am not sure

    echo file_get_contents( 'some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ] );
    // ideally a binary-safe function needs to be used above

Dies ist eine bewährte Technik, die ich auf einer website verwendet werden.Das code-Beispiel ist ein Entwurf der Gliederung und verfeinert.

Andere Tipps

Ideen?Sie können beginnen, indem Sie sagen uns, welche web - /app-server, die Sie verwenden,, die helfen könnten :-)

Apache, sollten Sie in der Lage zu verwenden, eine RewriteRule morph die Anfrage in einer anderen form.Beispielsweise drehen /pub/docs/x.pdf in request.php?file=/pub/docs/x.pdf könnte getan werden, mit so etwas wie:

RewriteRule ^/pdf/(.*)\.pdf/  request.php?file=/$1.pdf

Denken Sie daran, dies ist aus dem Speicher (sechs Jahre her, seit ich Sie berührte, Apache und trotzdem sauber : -) das format kann etwas anders sein.

Update:

Nun, du hast, dass sortiert, hier sind ein paar Optionen für Ihre nächste problem.

1/ Benennen Sie die PDF-Dateien haben eine andere Erweiterung so, dass Sie nicht erwischt der rewrite-Regel.Sie sollten so konfiguriert werden, um push-out die gleichen MIME-Typ auf dem client, so dass Sie offen in die Kunden der Wahl der Zuschauer.

2/ Do-download, als Teil des Drehbuchs als auch, nicht als einen direkten Zugang zu den PDF -.Da die Einreichung des Formulars ist ein HTTP-Anforderung, Sie sollten in der Lage sein, Sie zu beantworten, sofort mit der PDF-Inhalt als re-directing Sie wieder auf der download-Seite.

Dass die zweite option wäre meine Wahl, da es:

  • hält die Menschen herauszufinden, die Sie bekommen können, um die PDF-Dateien einfach durch das anfordern von xx.pdfx anstelle von xx.pdf.
  • macht es schneller für die person, um die PDF-Datei (die Sie nicht haben, klicken Sie auf den link, wieder).

Beachten Sie, dass meine Antwort mit Bezug auf eine .NET-website, aber ich bin mir sicher, dass Sie die gleichen Konstrukte existieren, irgendwo in PHP.

Ich hätte ein HTTPModule mit einem Pfad der *.pdf-Datei, die einfach nicht auf eine Antwort.Redirect auf Anfrage.php?...usw. (in meinem Fall verlangen.aspx) Und dann in den event-handler für die Schaltfläche klicken Sie auf diese Seite, wenn Sie wissen, dass die pdf-Anzeige und dass Sie berechtigt sind, einfach tun, eine Antwort.ContentType = [MIME-Typ von pdf] und Antwort.WriteFile(PDF-Datei), und schließlich die Antwort.End().

Es gibt andere Dinge, die Sie hinzufügen können, um es besser zu machen, z.B. Dateigröße, etc.Aber in der minimalen Fall, das würde funktionieren.Wenn Sie möchten, dass der code in C#, ich könnte kommen mit etwas über 3 Minuten, aber in PHP bin ich ganz verloren.Ich würde damit beginnen die Suche nach HTTPModules und wie Sie zu schreiben in PHP.

Googeln für "PHP HTTPModule" führt zu diesem: Äquivalent zu ASP.NET HttpModules in PHP also, ich kann ein wenig schief, aber ich hoffe, das ist ein Ausgangspunkt.

Verwenden .htaccess-Datei, wenn Sie über einen Apache-web-server.Sie müssen sicherstellen, dass Sie mod_rewrite aktiviert, aber sobald Sie tun, können Sie überschreibt alle Dateien mit diesen zwei einfachen Linien:

RewriteEngine On RewriteRule ^.pdf - $ /rewrite.php [NC,L]

Wenn Sie IIS verwenden, können Sie erreichen etwas ähnliches mit ISAPI_Rewrite.

Ihre andere alternative ist, um Ihre pdf-Datei in einem Verzeichnis ist nicht öffentlich zugänglich und dann jeden Antrag für eine pdf-Ressource zurückkehren würde, ein "Zugriff verweigert" - Fehler und die Dateien können nur zugegriffen werden durch die entsprechende download-Skript.

if($user==authenticated){
 //set pdf headers
 echo file_get_contents('actual.pdf');

keine mod-re-schreibt, verbirgt sich tatsächlich eine Quelle und ist das, was ich normalerweise mache - hoffe, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top