Zugriff über Android (Dateimanager)
Closed this issue · 17 comments
Gibt es einen Weg unter Android auf die Dateien zuzugreifen Geht neuerdings mit keinen der Google Play Cliens mehr.
Wie sieht der Fehler aus? Wie die URL?
Bei mir werden mit /webdav
zwar Ordner angezeigt, ich kann die aber nicht auswählen ("Not found"). Wenn ich nur die Domain angebe, kann ich Filemanager auswählen und dann sind alle Ordner sichtbar. Client ist FV Datei Explorer.
Die einzige möglichkeit sich einzuloggen ist unter Cirrus. dort kann ich aber neuere Dateien nicht mehr öffnen Alle anderen Clients sagen veraltetes Protokoll. Webdav geht nur über Total Comander aber kein Zugriff Password wird nicht akzeptiert.
Das hilft leider nicht. Benutzt du Apache als Webserver (in der config/htaccess hatte ich was umzustellen, aber wäre Zufall wenn auch bei dir so...)? Hast du ein Log? Der o.g. Android Dateibrowser kann meine Dateien in Tine über WebDAV öffnen... EDIT: Ich hatte auch noch einen Uralt-owncloud client auf dem Handy, der ging auch.
logs habe ich keine. mein hoster benutzt Apache. Bei mir funktioniert nur der Uralt Client, nur dass ich neuere Dateien (EPUB) nicht mehr öffnen kann. bei alten Dateien geht es. Es wird kein Fehler angezeigt nur die Option öffnen steht halt nicht zur Verfügung.
Ich hatte heute in der Familie einen Fall mit Windows 10-Client. Da kam wieder das CONTENT_LENGTH
-Problem. Vielleicht ist es das auch bei dir? Für einen Workaround siehe #6.
Login klappt jetzt. Wenn ich aber versuche die Ordner zu öffnen sagt er nur Datei nicht vorhanden.
Ja, sowas habe ich auch. Also Übersicht wird angezeigt, kann nur keine Datei öffnen. Muß mal checken, ob das mit nginx geht.
Hast du ein Log? Da muss dann was drin stehen mit "GET" und "not found" und "expressive" Router.
Nein, Nur die Meldung das die Datei nicht existiert..
Ok, ähnlich aber anders. Bei dir kommt INFO (6): Tinebase_Expressive_Middleware_FastRoute::process::67 returning 404 method not found
schon beim PROPFIND
, was ich durch den Workaround mit Content-Length (siehe oben) abstellen konnte.
Ich habe das Problem, dass nachdem der PROPFIND durch ist, der 404-Routingfehler beim GET
auftaucht. D.h. nicht schon beim Lesen des Verzeichnisinhalts, sondern erst beim Öffnen der Dateien.
Hab die Zeile aus dem Workaround eingefügt, ändert aber nichts.
Muss ich die an einer bestimmten Stelle einfügen?
Du verwendest eine .htaccess-Datei? Dann dort vor die Rewrites. Und ins Log schauen, ob es eine Fehlermeldung gibt.
Danke, ändert nichts.
Magst du mal deine .htaccess
-Datei posten? Du verwendest ja kein nginx, oder? Bei welchem Hoster bist du?
Bei mir sieht die Config so aus, ist aber direkt in der Apache Config als <VirtualHost
, nicht in separater Datei (vermutlich hast du deshalb führende /
bei den Rewrites).
Um WebDAV voll nutzen zu können, brauchte ich einerseits den o.g. Tweak, andererseits musste ich den User-Agent
abfangen. Hier mal die relevanten Fixes (die Zeilen unter dem Kommentar FIX):
#
# Tine 2.0
#
ProxyTimeout 1860
ProxyPass /ocs/ !
ProxyPass /remote.php !
# FIX: PHP does not include Content-Length into HTTP_*
SetEnvIf Content-Length "(.*)" HTTP_CONTENT_LENGTH=$1
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/tine/$1
<Directory /var/www/tine>
Options FollowSymlinks
DirectoryIndex index.php
AllowOverride All
Require all granted
RewriteEngine On
# ActiveSync
RewriteBase /
RewriteRule ^Microsoft-Server-ActiveSync index.php?frontend=activesync [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# OpenID
RewriteRule ^users/(.*) index.php?frontend=openid&username=$1 [L,QSA]
# Anonymous downloads
RewriteRule ^download/get/(.*) index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^download/show/(.*) index.php?method=Download.displayNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# *DAV well known
RewriteRule ^\.well-known/caldav calendars [R]
RewriteRule ^\.well-known/carddav addressbooks [R]
# Tine's nginx config mentiones: see #177979: [VS] rewrite rule für webdav auf / (root folder)
# iPhone + only office + other broken clients
RewriteCond "%{HTTP_USER_AGENT}" "^Documents/" [OR]
RewriteCond "%{HTTP_USER_AGENT}" "^Dokumente/.*CFNetwork/" [OR]
RewriteCond "%{HTTP_USER_AGENT}" "^okhttp/" [OR]
# FIX 2: Force webdav for Gnome Virtual File System
RewriteCond "%{HTTP_USER_AGENT}" "^gvfs/" [OR]
# FIX 3: Force webdav for Windows Clients and those pretending (therefore without '^')
RewriteCond "%{HTTP_USER_AGENT}" "Microsoft-WebDAV-MiniRedir/" [OR]
RewriteCond "%{HTTP_USER_AGENT}" "^Dalvik/"
RewriteRule ^.*$ index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# *DAV
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
RewriteRule ^.*$ index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^addressbooks index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^calendars index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^principals index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^webdav index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^remote.php index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# SabreDAV Images
RewriteCond %{QUERY_STRING} ^sabreAction=asset&(.*)$
RewriteRule ^ webdav [L,QSA]
# Static Files & Routing
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php?doRouting=1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# caching
ExpiresActive On
ExpiresDefault A604800
ExpiresByType image/x-icon A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/png A604800
ExpiresByType image/gif A604800
ExpiresByType image/js A604800
ExpiresByType application/x-shockwave-flash A604800
SetOutputFilter DEFLATE
FileETag None
</Directory>
Der erste Block übergibt an PHP, der FIX muss davor stehen. Wie auch immer bei dir die Übergabe funktioniert, /ocs/
und /remote.php
dürfen nicht unmittelbar übergeben werden - das ist die Kompatibilitätsschicht für ownCloud / nextCloud.
Getestet mit Windows 11 und Gnome 45.3.
Falls es das löst, schließe bitte den issue. Ich mache ohnehin einen neuen auf.
Hoster: All-Inkl
.htaccess:
DirectoryIndex index.php
Header always set X-Content-Type-Options nosniff
Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header set X-Frame-Options SAMEORIGIN
Header unset Content-Security-Policy
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"
Header unset X-Content-Security-Policy
Header add X-Content-Security-Policy "default-src 'self'"
Header unset X-WebKit-CSP
Header add X-WebKit-CSP "default-src 'self'"
Header set X-XSS-Protection: "1;mode=block"
SetEnvIf Content-Length "(.*)" HTTP_CONTENT_LENGTH=$1
#<IfModule mod_php5.c>
# Define PHP_MODULE_INSTALLED
#</IfModule>
<IfModule mod_php7.4.c>
Define PHP_MODULE_INSTALLED
</IfModule>
<IfDefine PHP_MODULE_INSTALLED>
php_value max_input_time 120
php_value session.gc_maxlifetime 86400
php_value memory_limit 128M
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value safe_mode off
php_flag display_errors off
php_flag log_errors on
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
php_value max_execution_time 90
</IfDefine>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^index(.*) index.php
# ActiveSync
RewriteRule ^Microsoft-Server-ActiveSync index.php?frontend=activesync [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# OpenID
RewriteRule ^users/(.*) index.php?frontend=openid&username=$1 [L,QSA]
# WebDAV / CalDAV / CardDAV
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
RewriteRule ^$ index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^addressbooks index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^calendars index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^webdav index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^principals index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^remote.php index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# Anonymous downloads
RewriteRule ^download/get/(.*) index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^download/show/(.*) index.php?method=Download.displayNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# Routing
# <Location />
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php?doRouting=1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# </Location>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 month 1 days"
ExpiresByType image/jpeg "access plus 1 month 1 days"
ExpiresByType image/png "access plus 1 month 1 days"
</IfModule>
Das SetEnvIf
passt. Am Anfang deines WebDAV-Blocks würde ich RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
empfehlen (also zusätzlich HEAD), eine Zeile drauf ist besser die URI mitzunehmen RewriteRule ^.*$
. Für die letzte Änderung setze noch vor den WebDAV-Block die Einzelroutings.
Ich würde die .htaccess so zusammensetzen:
DirectoryIndex index.php
Header always set X-Content-Type-Options nosniff
Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header set X-Frame-Options SAMEORIGIN
Header unset Content-Security-Policy
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"
Header unset X-Content-Security-Policy
Header add X-Content-Security-Policy "default-src 'self'"
Header unset X-WebKit-CSP
Header add X-WebKit-CSP "default-src 'self'"
Header set X-XSS-Protection: "1;mode=block"
SetEnvIf Content-Length "(.*)" HTTP_CONTENT_LENGTH=$1
#<IfModule mod_php5.c>
# Define PHP_MODULE_INSTALLED
#</IfModule>
<IfModule mod_php7.4.c>
Define PHP_MODULE_INSTALLED
</IfModule>
<IfDefine PHP_MODULE_INSTALLED>
php_value max_input_time 120
php_value session.gc_maxlifetime 86400
php_value memory_limit 128M
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value safe_mode off
php_flag display_errors off
php_flag log_errors on
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
php_value max_execution_time 90
</IfDefine>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^index(.*) index.php
# ActiveSync
RewriteRule ^Microsoft-Server-ActiveSync index.php?frontend=activesync [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# OpenID
RewriteRule ^users/(.*) index.php?frontend=openid&username=$1 [L,QSA]
# Tine's nginx config mentiones: see #177979: [VS] rewrite rule für webdav auf / (root folder)
# iPhone + only office + other broken clients
RewriteCond "%{HTTP_USER_AGENT}" "^Documents/" [OR]
RewriteCond "%{HTTP_USER_AGENT}" "^Dokumente/.*CFNetwork/" [OR]
RewriteCond "%{HTTP_USER_AGENT}" "^okhttp/" [OR]
# FIX 2: Force webdav for Gnome Virtual File System
RewriteCond "%{HTTP_USER_AGENT}" "^gvfs/" [OR]
# FIX 3: Force webdav for Windows Clients and those pretending (therefore without '^')
RewriteCond "%{HTTP_USER_AGENT}" "Microsoft-WebDAV-MiniRedir/" [OR]
RewriteCond "%{HTTP_USER_AGENT}" "^Dalvik/"
RewriteRule ^.*$ index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# WebDAV / CalDAV / CardDAV
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
RewriteRule ^.*$ index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^addressbooks index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^calendars index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^webdav index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^principals index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^remote.php index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# Anonymous downloads
RewriteRule ^download/get/(.*) index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^download/show/(.*) index.php?method=Download.displayNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# Routing
# <Location />
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php?doRouting=1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
# </Location>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 month 1 days"
ExpiresByType image/jpeg "access plus 1 month 1 days"
ExpiresByType image/png "access plus 1 month 1 days"
</IfModule>
Kannst du das probieren?
Jetzt funktioniert WebDav.
Danke.