2017-08-31 3 views
0

Meine Website verwendet PHP und HTAccess.Wie kann ich Benutzer umleiten, wenn sie einem Link direkt zu einer bestimmten Datei folgen?

Grundsätzlich habe ich eine Datei (example.com/music.mp3) und ich möchte nicht, dass jemand direkt darauf zugreift, es sei denn, sie kommen von einer bestimmten Seite (example.com/music.php).

Auch, wenn sie versuchen und direkt darauf zugreifen, möchte ich es auf die Seite umleiten.

Gibt es eine Möglichkeit, dies zu tun? Jede Hilfe wird sehr geschätzt.

Aus Gründen der Klarheit:

Fall 1: Der Benutzer klickt auf einen Link zur MP3-Datei von einem externen Forum und sie sind auf die PHP-Datei umgeleitet.

Fall 2: Der Benutzer klickt den Link zur mp3-Datei von der entsprechenden Seite und sie können ihn kostenlos herunterladen/anhören.

+0

Sie können die Anfrage immer ablehnen, abhängig vom Wert des HTTP-Referrers (siehe https://en.wikipedia.org/wiki/HTTP_referer), aber da der Wert clientseitig gefüllt ist, kann er gefälscht werden Dies macht es zu einer unzuverlässigen Möglichkeit, eine Ressource zu schützen. – SirDarius

Antwort

0

Sie können dies erreichen, indem Sie die <if> und <else> Richtlinie verwenden.

<if "%{HTTP_REFERER} == 'example.com'"> 
    RewriteRule ^(.*)$ http://example.com/music.mp3 [R=301,NC,L] 
</if> 
<else> 
    RewriteRule ^(.*)$ http://example.com/music.php [R=301,NC,L] 
</else> 

Also, wenn der Werber zu example.com gleich, leiten dann zu /music.mp3 - wenn nicht, dann zu /music.php umleiten.

Stellen Sie sicher, dass Sie den Cache leeren vor dies testen.

1
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$ [NC] 
RewriteRule ^music.mp3$ http://www.example.com/music.php [R,L] 

Wenn Sie leere Referer zulassen möchten, fügen Sie diese Regel zuerst:

RewriteCond %{HTTP_REFERER} !^$ 
+0

Danke für diese Lösung. Ich habe es versucht und es hat funktioniert, aber dann hörte es auf zu arbeiten. Hier ist, was ich getan habe: 1) Klicken Sie auf den Link zu der Datei auf der Seite und es begann mit dem Download. Gut. 2) Versuchte den Zugriff auf die Datei direkt und es leitete mich auf die Seite um. Gut. 3) Versuchte, den Link auf der umgeleiteten Seite nur zu klicken, um zu sehen, dass er erneut zur Seite und nicht zur Datei umgeleitet wurde. Oh nein. – user1413341

+0

Ändern Sie meine erste '' RewriteCond'' in diese: '' RewriteCond% {HTTP_REFERER}!^Http: // (www \.)? Example.com/music.php [NC] '' – kmoser

+0

Vielen Dank für das Follow-up aber das gleiche passiert. – user1413341

0

Was music.php über mit music.mp3 zu lesen und es zurückgeben? Das Vertrauen in HTTP_REFERER ist nicht fehlerfrei. Einige Leute haben leere Referer, und sobald jemand entdeckt, dass Sie HTTP_REFERER verwenden, um den Download zu erlauben, wird sich das Wort verbreiten und Ihre Benutzer werden beginnen, gefälschte Header zu verwenden.

Etwas wie folgt aus:

<?php 
$filename = 'music.mp3'; 
if (isset($_SESSION['auth'])) { 
    // user is authenticated 
    header('Content-type: audio/mpeg'); 
    header('Content-length: ' . filesize($filename)) 
    readfile($filename); 
} else { 
    header('Location: login.php'); 
} 
?> 

Ich habe ein System, wo die Menschen angemeldet sein, haben einige pdf Berichte zum Download bereit. Sie erhalten einen Link, der auf eine PHP-Datei verweist. Die PHP-Datei bestimmt, ob der Benutzer angemeldet ist, und wenn dies der Fall ist, sende ich einen Inhaltstyp application/pdf und verwende readfile, um die Datei an den Benutzer zu senden.

einfach machen sehr sicher$filename zu sanieren, wenn dies durch den Client gesendet wird, oder der Kunde in der Lage, fast jede Datei von Ihrem System zu lesen.

+0

Ich habe kein Login-System auf meiner Website. Ich möchte nur sicherstellen, dass die Leute nicht direkt mit bestimmten Dateien aus ihren Blogs/Foren verlinken. Gibt es eine Möglichkeit, dies ohne Benutzerauthentifizierung in PHP zu tun? – user1413341

+0

Es gibt keine Möglichkeit, sicherzustellen, dass Nutzer Ihre Daten nicht auf ihren Websites verlinken. Sie können einen Link einfügen, kopieren und einfügen und herunterladen. Oder sie verwenden '' auf ihren Seiten und Sie erhalten leere Referer. – ThoriumBR

+0

Es muss nicht 100% Schutz sein, nur eine allgemeine Methode, um Leute zu blockieren, die willkürlich direkt mit der Datei über soziale Medien usw. verlinken. – user1413341

Verwandte Themen