.HTACCESS
shadowhunter
- sonstiges
0 Axel Richter0 Cheatah
Hallo,
um Datein im Verzeichniss durch direkte Links das Downloaden zu verbieten, kann man doch normalerweiße folgenden Code in die .htaccess schreiben und es sollte dann eine alternativ Grafik kommen:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com(/.*)?$ [NC]
RewriteRule .(gif|jpg|GIF|JPG)$ http://www.domain.com/error.gif [R,L]
Jedoch habe ich bemerkt, dass dies gar nicht funktioniert. Das normale Bild wird trotzdem angezeigt, wenn die Bild-URL über den Borwser aufgegriffen wird.
Was könnte hier falsch sein? Habe die .htaccess in den Haupt-Ordner kopiert.
Vielen Dank im Voraus!
mfg
Hallo,
um Datein im Verzeichniss durch direkte Links das Downloaden zu verbieten, kann man doch normalerweiße folgenden Code in die .htaccess schreiben und es sollte dann eine alternativ Grafik kommen:
Behauptet wer?
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com(/.*)?$ [NC]
RewriteRule .(gif|jpg|GIF|JPG)$ http://www.domain.com/error.gif [R,L]
Hm: Wenn der Referer NICHT leer ist UND NICHT dem Muster entspricht, dann ersetzt alle Anforderungen von .(gif|jpg|GIF|JPG)$ durch http://www.domain.com/error.gif.
Punkt 1:
Was, wenn der Referer leer ist?
Punkt 2:
Wir "verbessern":
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com(/.*)?$ [NC]
RewriteRule .(gif|jpg|GIF|JPG)$ http://www.domain.com/error.gif [R,L]
Wenn der Referer leer ist ODER NICHT dem Muster entspricht, dann ersetzt alle Anforderungen von .(gif|jpg|GIF|JPG)$ durch http://www.domain.com/error.gif.
Hm, nun haben wir eine Endlosschleife, weil der Redirect auf error.gif ja auch wieder einer Anforderung von .(gif|jpg|GIF|JPG)$ entspricht.
Du kannst also in der RewriteRule höchstens auf eine Ressource umleiten, die keiner Anforderung von .(gif|jpg|GIF|JPG)$ entspricht.
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com(/.*)?$ [NC]
RewriteRule .(gif|jpg|GIF|JPG)$ http://www.domain.com/error.cgi [R,L]
viele Grüße
Axel
Hi,
Vielen herzlichen Dank für dein Bemühen!
Es funktioniert fast 100%:
Wenn ich ein Foto mit der Galerie anklicke, wird es geöffnet. Jedoch wenn ich die direkte URL im Adress-Leiste eingebe, kommt wie erwünscht das Fehler Bild.
Mein Problem ist jetzt noch, dass die angesehenen Fotos in den Cache (vermutlich) geladen werden & somit nach dem Ansehen in der Galerie das Foto trotzdem via direkten URLs aufgegriffen werden kann.
Kann ich dieses Problem beseitigen? Kann ich im Header eine Befehlszeile hinzufügen, dass keine Bilder in Cache geladen werden?
z.B. <meta http-equiv="expires" content="0">
Schöne Woche! mfg
Hallo,
Mein Problem ist jetzt noch, dass die angesehenen Fotos in den Cache (vermutlich) geladen werden & somit nach dem Ansehen in der Galerie das Foto trotzdem via direkten URLs aufgegriffen werden kann.
Warum ist das ein Problem? Jemand, der Deine Galerie aufruft, in der die Bilder dann ja angezeigt werden, kann diese Bilder genausogut als Datei speichern, wenn er will. Was willst Du also erreichen? Das direkte Einbinden Deiner Bilder in fremde Seiten und der Aufruf von Bildern, die Du nicht explizit in Seiten veröffentlichst, wird bereits verhindert.
Kann ich dieses Problem beseitigen? Kann ich im Header eine Befehlszeile hinzufügen, dass keine Bilder in Cache geladen werden?
Im PHP-Manual gibt es bei http://www.php.net/header ein Beispiel zum Senden von Cache-Control Headern.
viele Grüße
Axel
Guten Morgen
Die Bilder können nicht einfach & direkt abgespeichert werden (ausg. Screenshot)...
Wie kann ich in html den Cache regeln? Regelt das php besser als html? Genügen diese folgenden Angaben für die Cache-Regeln?
Ich befürchte, dass diese Angaben jedoch nicht ausreichen, da bei einem grossen Netzwerk (z.b. Arbeit) ein normales neu Laden von einer ganz normalen html Seite trotzdem den Cache beansprucht wird...
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
1000x Danke...
mfg
Hallo,
Die Bilder können nicht einfach & direkt abgespeichert werden (ausg. Screenshot)...
*g* Was zu beweisen wäre ;-). Will sagen: Das glaube ich nicht.
Wie kann ich in html den Cache regeln? Regelt das php besser als html?
Ja, ein vom Server gesendeter HTTP-Response-Header hat Vorrang vor dem Äquivalent in HTML.
Genügen diese folgenden Angaben für die Cache-Regeln?
<meta http-equiv="expires" content="0">
^ist falsch. Content von Expires muss ein HTTP-date sein.
<meta http-equiv="cache-control" content="no-cache">
^wäre korrekt, aber siehe oben. Wenn der Server was anderes sendet, dann gilt das.
<meta http-equiv="pragma" content="no-cache">
^ist für HTTP1.0, siehe oben. Wenn der Server was anderes sendet, dann gilt das.
Ich befürchte, dass diese Angaben jedoch nicht ausreichen, da bei einem grossen Netzwerk (z.b. Arbeit) ein normales neu Laden von einer ganz normalen html Seite trotzdem den Cache beansprucht wird...
Ja, entweder sendet der Server andere Header, die dann gelten, oder der falsche Wert bei Expires stört. Hast Du PHP zur Verfügung? Wenn ja, dann http://www.php-faq.de/q/q-http-caching.html.
viele Grüße
Axel
Hallo,
Die Bilder können nicht einfach & direkt abgespeichert werden (ausg. Screenshot)...
selbstverständlich können sie das:
* Rechtsklick und "Save Image As"
* Suchen der Bilddatei im Browser-Cache
* Drag&Drop des Bildes in ein lokales Verzeichnis
Noch mehr Anregungen?
Wie kann ich in html den Cache regeln? Regelt das php besser als html?
Entscheidend sind die HTTP-Header, die dein Server sendet, egal ob sie durch generelle Konfigurationseinstellungen oder durch PHP generiert werden. Nur wenn er keine Angaben zum Caching macht, gelten *ersatzweise* die http-equiv-Angaben aus den meta-Anweisungen.
Ciao,
Martin
Hi,
Jedoch habe ich bemerkt, dass dies gar nicht funktioniert.
richtig, sich auf ein optionales Feld wie den Referer zu verlassen, *kann* nicht funktionieren. Das ist aber altbekannt. Da bei denjenigen, bei denen sowas trotzdem funktioniert, üblicherweise Laborbedingungen herrschen:
Das normale Bild wird trotzdem angezeigt, wenn die Bild-URL über den Borwser aufgegriffen wird.
Die Grafik stammt aus Deinem Cache.
Was könnte hier falsch sein?
Das Konzept. Du kannst keinen direkten Zugriff verbieten, aber den direkten Zugriff erlauben. Und ja, *jeder* Zugriff ist in HTTP "direkt".
Cheatah