Mit mod_rewrite Dateien in Ordnern und Unterordnern abfangen und an PHP schicken

  • Hallo,

    ich habe das folgende Problem: Ich habe einen Ordner data der im htdocs liegt:

    htdocs/index.php
    htdocs/download.php
    htdocs/.htaccess
    htdocs/data/

    Ich möchte, dass ALLE Dateien, die aus diesem Ordner aufgerufen werden an die Datei download.php im Überverzeichnis gesendet werden, also ca so:

    Aufruf von http://www.domain.com/data/test%20file.zip -> http://www.domain.com/download.php?f…test%20file.zip

    Wichtig dabei ist:

    • es müssen alle beliebigen Unterverzeichnisse von Ordner /data/ berücksichtigt werden
    • es muss das gesamte Verzeichnis + Dateiname an die Datei übergeben werden
    • Leerzeichen und Sonderzeichen müssen wie bei urlencode kodiert werden, bzw, Leerzeichen im Dateinamen oder Ordnernamen dürfen keine probleme machen.


    Brauche nur Hilfe bei mod_rewrite Umsetzung

    Danke

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • Ungetestet, aber sollte hinhauen:

    Apache Configuration
    RewriteRule ^data/(.*)$ download.php?file=/data/$1

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Ich habe jetzt noch eine Frage:

    Ich habe folgendes zu mod_rewrite hinzugefügt:

    RewriteCond %{REMOTE_ADDR} !209.85.148.138 [NC]
    RewriteRule ^data/(.*)$ download.php?file=/data/$1

    Das brauche ich, weil Google Docs davon auchgeschlossen werden soll - ich hab mit gethostbyname() die IP von docs.google.com ermittelt, kann sie aber mit der Condition nicht anweden, weil bei Remote Addr immer eine andere IP rauskommt. Gibt es eine andere Möglichkeit docs.google.com von der Regel auszunehmen ? (Geht darum, den Google Document Viewer zu verwenden)

    EDIT:
    Habs jetzt über den USER_AGENT gelöst... Aber ist das auch sicher?
    RewriteCond %{HTTP_USER_AGENT} !^.*docs.google.com.*$ [NC]

    ??

    Lg

    PHP
    if(isset($this) || !isset($this)){ // that's the question...

    Einmal editiert, zuletzt von Teron Gerofied (3. November 2011 um 09:36)

  • Warum willst du Google Docs davon ausschließen?
    Gib bei Google Docs doch einfach per PHP die normale Datei zurück.
    Von außen merkt man ja nichts von mod_rewrite. Da kannst du mit PHP programmieren was du willst.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Das dachte ich auch - aber es geht nicht - egal, ob man es als Dateidownload oder sonst wie sendet - Google scheint irgendwie den Unterschied zu erkennen und spuckt eine Fehlermeldung aus, dass Dateityp und Endung nicht zusammenpassen.

    Jetzt funktionierts jedenfalls. Die Frage ist nur, ob die Abfrage des Useragents auch sicher ist (von wegen Useragent fälschen, etc...)

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • Jap, hab ich - trotzdem hats Google erkannt. Naja, ist ja egal, jedenfalls - wenns eine Möglichkeit gäbe, die IP Adresse, die man rauskriegt, wenn man gethostbyname("docs.google.com"); aufruft zu vergleichen, wäre das ideal.

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • Naja, du kannst aj mit PHP den HTTP-Header ändern. Es gibt versch. plugins für browser um die Header abzufangen. Ruf dann mal die Datei richtig auf(also so, wei google das als datei erkennen würde) und bearbeite dann deine PHP-Datei so, dass der Header von PHP genauso aussieht. Das muss eigentlich klappen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Es gibt keinen Unterschied... Keine Ahnung woran Google es merkt... Ich werd das Zeug jetzt einfach mit Object einbinden...

    PHP
    if(isset($this) || !isset($this)){ // that's the question...