Ich muss eine etwas seltsame Operation durchführen.
Zuerst laufe ich auf Debian, apache2 (das als Benutzer www-Daten 'läuft')
Ich habe also eine einfache Textdatei mit .txt ot .ini oder einer beliebigen Erweiterung, die keine Rolle spielt.
Diese Dateien befinden sich in Unterordnern mit einer Struktur wie der folgenden:
www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar .TXT
Daher ist der Dateiname immer derselbe, ebenso wie für die 'Hierarchie'. Ändern Sie einfach den Namen des Ordners: /folder-name-static/folder-name-dinamyc/file-name-static.txt
Was ich tun sollte, ist (glaube ich) relativ einfach: Ich muss in der Lage sein, diese Datei von Programmen auf dem Server (z. B. Python, PHP) zu lesen, aber wenn ich versuche, den Dateiinhalt per Browser abzurufen (Ziffern der URL www. example.com/folder1/car/foobar.txt oder über cUrl usw.) Ich muss einen verbotenen Fehler oder was auch immer erhalten, aber nicht auf die Datei zugreifen .
Es wäre auch schön, wenn selbst der Zugriff auf diese Dateien über FTP "versteckt" wäre oder sowieso nicht heruntergeladen werden könnte (zumindest das, was ich mit dem FTP-Root und den Benutzerdaten verwende).
Wie kann ich?
Ich habe dies online gefunden, in die Datei .htaccess:
<Files File.txt>
Order allow, deny
Deny from all
</ Files>
Es scheint zu funktionieren, aber nur, wenn sich die Datei im Webstamm (www.example.com / myfile.txt) und nicht in Unterordnern befindet. Darüber hinaus werden die Ordner in der zweiten Ebene (www.example.com/folder1/ Frucht wird /foobar.txt) dinamycally erstellt .. Ich möchte vermeiden , .htaccess - Datei von Zeit zu Zeit zu ändern.
Es ist möglich, eine solche Regel für alle Dateien mit Vornamen zu erstellen, die sich unter * www.example.com / Ordnername -statisch / * Ordnername-dinamyc / *** Dateiname befinden -static.txt *, wo diese Teile immer gleich sind , nur ** diese eine Änderung ?
EDIT :
Wie Dave Drager sagte, könnte ich dies semplifizieren, indem ich diese Dateien außerhalb des über das Internet zugänglichen Verzeichnisses halte. Aber diese Verzeichnisse enthalten auch andere Dateien, Bilder und Dinge, die von meinen Benutzern verwendet werden. Ich versuche also einfach, kein doppeltes Ordnersystem zu haben, wie zum Beispiel:
/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]
//and, then for the 'secrets' files:
/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt
quelle
Ja, das ist alles möglich. Wenn Sie jedoch Programme auf dem Server haben, die auf Textdateien zugreifen müssen, sollten diese sich außerhalb des Webstamms befinden. Wenn sich Ihre Webdateien beispielsweise in ~ / public_html / befinden, sollten Sie sie in ~ / data speichern. Es gibt keinen Grund, sie im öffentlichen HTML-Ordner abzulegen.
Stellen Sie neben dem Entfernen aus dem Webordner sicher, dass die Unix-Berechtigungen für sie korrekt festgelegt sind. Der Benutzer der Skripte müsste Lese- (Schreib-?) Zugriff haben, aber jeder andere muss diesen Zugriff nicht haben.
Wenn Sie diese Dateien in einem über das Internet zugänglichen Ordner haben müssen, gibt es Möglichkeiten, das zu tun, was Sie über mod_rewrite verlangen. Auf der folgenden Website finden Sie viele Beispiele, von denen eines in die Rechnung passen sollte.
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
quelle
Warum nicht Standard-Unix-Dateiberechtigungen verwenden, um den Zugriff auf die Datei zu verweigern?
Auf Wikipedia gibt es eine anständige Erklärung zu Unix-Dateiberechtigungen
quelle
Fügen Sie die .htaccess-Datei in das Unterverzeichnis ein und legen Sie in der Anweisung AllowOverride All fest
quelle
Sie können Linux-ACLs verwenden .
quelle
Nachdem ich Sie alle gelesen hatte, bemerkte ich, dass die .htaccess-Datei der richtige Weg für mich sein kann: Betrifft nur die Dateien in dem Ordner, in dem sie sich befindet.
Aber meine Ordner werden dynamisch generiert. Ich denke nicht, dass das Kopieren der .htaccess-Datei oder das erneute Erstellen jedes Mal, wenn ich einen neuen Ordner erstelle, ein zuverlässiger Weg ist.
Wie Dave sagte, sollte der logische Weg darin bestehen, die Konfigurationstextdateien außerhalb des über das Internet zugänglichen Ordners zu speichern.
Aber in jedem Ordner muss ich andere Dateien speichern, zum Beispiel Bilder, die über das Internet zugänglich sein müssen ... und ich denke immer noch nicht, dass das Replizieren der Ordnerstruktur in und aus dem Web-Root-Verzeichnis auch ein zuverlässiger Weg ist . Daher muss ich sogar die Apache-Konfiguration ändern, um den Konfigurationsordner in den PHP-zulässigen Pfad aufzunehmen. Dies sollte sowieso kein Problem sein.
Wenn ich also nicht das Bessere habe , muss ich das weniger Schlechte wählen.
Ich werde vorerst die Lösung für mehrere .htaccess-Dateien verwenden, in der Hoffnung, dass ich es in Zukunft nicht bereuen werde.
Jede andere Lösung wird geschätzt.
quelle
Von der Bestellung Dokumentationsabschnitt:
Folgendes ist also falsch:
Das Folgende ist (mehr) richtig
quelle