2017-05-28 3 views
0

Ich habe so viele verschiedene Möglichkeiten gesucht und getestet, wie ich kann, aber nichts scheint zu funktionieren. In einer Nussschale streame ich Audio, aber der Pfad wird durch eine Rewritecond-Regel verschleiert. Ich möchte keinen direkten Zugriff über den Browser auf die Streaming-Datei, aber PHP benötigt weiterhin Zugriff auf die Datei, um es zu streamen. Hier ist die Streaming-URL:Wie verweigern Sie den Zugriff auf ein bestimmtes Verzeichnis, wenn das Verzeichnis bereits Teil der RewriteCond-Regel ist und kein Ereignis existiert?

www.test.com/audio/32478576 

Das Verzeichnis "Audio" existiert nicht. Ich verwende .htaccess, um es zum Streaming-Skript umzuleiten. Hier sind die. Htaccess Bits:

RewriteRule ^/?audio/([\d]+)/?$ serve.php?id=$1 [L,QSA] 

All das funktioniert gut. So, dachte ich, dass alles, was benötigt würde, Zugriff auf die Datei zu verwehren wäre folgend meine .htaccss Datei hinzufügen:

<Files ~ "audio/"> 
order allow,deny 
deny from all 
</Files> 

das hat nicht funktioniert. Ich konnte immer noch Audio direkt vom Browser streamen.

Vielleicht ist das nicht möglich - zu tun, was ich will. Was vermisse ich? .htaccess ist nicht meine Stärke, aber ich denke immer noch, dass es möglich ist. Ich habe einfach nicht den richtigen Code oder die richtigen Dinge in der richtigen Reihenfolge. Jede Hilfe wird sehr geschätzt. Vielen Dank.

UPDATE:

Es ist etwas falsch mit meinem Server eingerichtet werden kann. Ich habe einen Basistest mit folgendem Rewrite gemacht:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)test.com/.*$ [NC] 
RewriteRule test\.php$ - [F] 

Aber ich hatte immer noch direkten Zugriff auf die Datei test.php. Aber - ich sollte nicht, oder? Vielleicht ist etwas falsch auf meinem Server eingestellt?

Antwort

0

<directory> und <files> Direktiven gelten für das Dateisystem. Da/audio Verzeichnis nicht existiert, hat <Files ~ "audio/"> keine Wirkung.
<Location> Direktive gilt für URLs und funktioniert möglicherweise.
In einem anderen Ansatz, wenn Apache-Version 2.4 ist, kann es getan werden, wie es in dieser Dokumentation Seite http://httpd.apache.org/docs/current/howto/access.html beschrieben ist.

+0

ich in der Erklärung gesucht, aber es sieht so aus (wenn ich es richtig gelesen), dass nicht in .htaccess erlaubt - nur httpd.conf. Ich benutze Apache 2.4 und habe mir die Zugriffskontroll-Bits angeschaut, aber ich fürchte, ich konnte es nicht vollständig verstehen. – musicarr

0

Wie Sie verstehen, möchten Sie verhindern, dass server.php außerhalb Ihrer Domain test.com aufgerufen wird. Wenn dies der Fall ist, sollte HTTP_REFERRER eine URL sein, die test.com enthält.

Der HTTP_REFERRER kann von htaccess aus mit Code überprüft werden, der die direkte Verknüpfung von Mediendateien verhindert. Dieser Link: https://mediatemple.net/community/products/dv/204644230/prevent-hotlinking-with-a-htaccess-file beschreibt, wie Sie das direkte Verknüpfen von Mediendateien verhindern können. Der im Link angegebene Code kann geändert werden, um eine direkte Verbindung Ihrer Datei serve.php zu verhindern. Der folgende Code sollte funktionieren:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)test.com/.*$ [NC] 
RewriteRule audio/.+$ - [F] 
+0

Ja und nein. Theoretisch würde serve.php niemals vom Endbenutzer gesehen werden. nur http://www.test.com/audio/32478576 würde gesehen werden, da .htaccess dies in server.php übersetzt? id = 32478576. Den Zugriff auf server.php zu verweigern, wäre wahrscheinlich ein zweitrangiger Vorgang, aber den Zugriff auf das Verzeichnis/audio zu verweigern wäre die Hauptsache. Auch hier ist das Verzeichnis/audio/nicht vorhanden. Es ist nur ein Platzhalter für.htaccess zu haken, so dass es tatsächlich auf serve.php zeigen kann. – musicarr

+0

Ich habe das Beispiel aktualisiert, so dass es jetzt die Dateien im Audioverzeichnis blockiert, wenn der HTTP-Verweis nicht test.com ist. –

+0

Danke für das Update auf Ihrem Code. Versuch es, aber hatte immer noch Zugang. Ich habe gerade meinen ursprünglichen Post mit einem Test aktualisiert. Schau dir mein Update an. Vielleicht funktionieren deshalb Ihre Vorschläge nicht. – musicarr

Verwandte Themen