2016-06-08 12 views
0

Ich habe ein Problem mit einer RewriteRule, die (mehr oder weniger) in HTML-View mit einem Browser funktioniert, aber nicht als WebDav-Dienst mit einem Client (Davfs oder Cadaver unter Linux). Mein Gefühl ist, dass es mit der RewriteRule zusammenhängt.Apache falsch RewriteRule für WebDAV-Dienst

Was ich tun möchte: Von der URL-Perspektive: Haben Sie einen Ordner/Benutzer/jemand, wo jemand der einzelnen Benutzernamen ist. Und ich möchte eine Verknüpfung/private haben, die direkt auf die/users/myusername Verzeichnis verweist, wo ich Schreibzugriff habe. Im Dateisystem habe ich/storage/davroot für die DAV und DocumentRoot und/storage/davusers für alle Benutzerverzeichnisse. Beachten Sie, dass die Benutzer-Verzeichnisse nicht innerhalb des DocumentRoot sind, was es ein wenig schwierig macht.

Meine aktuelle Lösung ist dies:

# It's NOT working with the RewriteCond -- why? 
    # RewriteCond %{LA-U:REMOTE_USER} ^[a-z].* 
    RewriteRule ^\/private(.*)$ /users/%{LA-U:REMOTE_USER}$1 [PT] 

    <Directory /storage/davroot/> 
      # some settings for the rights, do not care 
    </Directory> 
    Alias /users /storage/davusers/ 
    <Directory "/storage/davusers/"> 
      # some other settings for the rights, also don't care 
    </Directory> 

Was richtig ist: Fast die gesamte Browser-Ansicht korrekt ist. Außer einem Problem: Die URL/private/wird korrekt aufgelistet, die URL-Leiste bleibt/private/(gewünschtes Verhalten). Aber die URL/private wird in/users/username/übersetzt und auch die URL-Leiste ändert sich zu dieser Adresse. Warum?

Wenn ich mich mit einem Webdav-Client (davfs) anmelde, wird das Thema sogar noch seltsamer. Der private Ordner ist leer, auf den Benutzerordner kann nicht zugegriffen werden. Mit Kadaver kann nicht auf den privaten Ordner zugegriffen werden und der Benutzerordner wird korrekt angezeigt.

Antwort

0

Dies ist eine schlechte Idee. Das Umschreiben funktioniert oft für "dumme" HTTP-Endpunkte wie Dateien, aber für WebDAV ändert sich das.

Das Problem ist, dass WebDAV HTTP-Anfragen wie PROPFIND Ergebnisse zurückgeben, die URLs enthalten. Diese URLs müssen mit der URL übereinstimmen, die Sie für den Zugriff auf die Ressource verwendet haben.

Apache-Neuschreiben funktioniert nur bei eingehenden Anfragen. Die ausgehenden xml-Antworten werden nicht "live modifiziert", um den Inhalt anzupassen.

Die vernünftige Sache in solchen Fällen ist, nicht neu zu schreiben, sondern nur umzuleiten. Nicht jeder Client unterstützt dies, aber zumindest funktioniert Ihr Server auf vorhersehbare Weise und entsprechend den Spezifikationen.

Eine andere Möglichkeit ist, etwas wie AliasMatch zu verwenden, weil diese Direktive tatsächlich mit dem lokalen Pfad und nicht nur mit der URL arbeitet. Wenn Sie es zur Arbeit bringen können, stelle ich mir vor, dass mod_webdav sich weiterhin vernünftig verhalten wird.

Aber ich bin mir nicht sicher, ob AliasMatch Header wie REMOTE_USER verwenden können.