WebDav external storage doesn't open folders with spaces or Cyrillic characters

The Basics

  • Nextcloud Server version (e.g., 29.x.x):
    • 32.0.1.2
  • Operating system and version (e.g., Ubuntu 24.04):
    • Debian GNU/Linux 12 (bookworm), OS_VERSION=1.10.0.0112 (Ugreen DXP4800 NAS)
  • Web server and version (e.g, Apache 2.4.25):
    • replace me
  • Reverse proxy and version _(e.g. nginx 1.27.2)
    • OpenResty 1.27.1.2 / Nginx Proxy Manager
  • PHP version (e.g, 8.3):
    • replace me
  • Is this the first time you’ve seen this error? (Yes / No):
    • No
  • When did this problem seem to first start?
    • After moving folders to the NAS and connecting them via External Storage/WebDAV.
  • Installation method (e.g. AlO, NCP, Bare Metal/Archive, etc.)
    • Docker container
  • Are you using CloudfIare, mod_security, or similar? (Yes / No)
    • No

Summary of the issue you are facing:

Nextcloud External Storage (WebDAV) fails to open folders whose names contain spaces or Cyrillic characters (for example “AE Plugins” or “Курсы”).
The Nextcloud log shows: Sabre\HTTP\ClientHttpException: Not Found.
This issue occurs only when accessing the NAS via Nextcloud/WebDAV. Direct access to the NAS works correctly.
In the browser, the path is displayed correctly with %20 for spaces and proper URL encoding for Cyrillic, but Nextcloud still fails with Not Found.

Steps to replicate it (hint: details matter!):

  1. Connect External Storage via WebDAV to the NAS containing a folder with a space in its name (e.g., “AE Plugins”).
  2. Open the folder via Nextcloud Web interface or WebDAV client.
  3. Observe the error: Sabre\HTTP\ClientHttpException: Not Found in the Nextcloud log.
  4. Accessing the same folder directly on NAS via WebDAV or Finder works correctly.

Log entries

Nextcloud

Please provide the log entries from your Nextcloud log that are generated during the time of problem (via the Copy raw option from Administration settings->Logging screen or from your nextcloud.log located in your data directory). Feel free to use a pastebin/gist service if necessary.

{"reqId":"wUlzHysjwW8YUSg62Fxs","level":3,"time":"2025-11-19T11:57:29+00:00","remoteAddr":"10.0.1.161","user":"barmindaniil","app":"no app in context","method":"PROPFIND","url":"/remote.php/dav/files/barmindaniil/WebDAV/home/home/AE%20Plugins/","message":"Uncaught exception","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.1 Safari/605.1.15","version":"32.0.1.2","exception":{"Exception":"Sabre\\DAV\\Exception\\ServiceUnavailable","Message":"Sabre\\HTTP\\ClientHttpException: Not Found","Code":0,"Trace":[{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Tree.php","line":95,"function":"getChild","class":"OCA\\DAV\\Connector\\Sabre\\Directory","type":"->","args":["AE Plugins"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":971,"function":"getNodeForPath","class":"Sabre\\DAV\\Tree","type":"->","args":["files/barmindaniil/WebDAV/home/home/AE Plugins"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1664,"function":"getPropertiesIteratorForPath","class":"Sabre\\DAV\\Server","type":"->","args":["files/barmindaniil/WebDAV/home/home/AE Plugins",["{DAV:}getcontentlength","{DAV:}getcontenttype","{DAV:}getetag","{DAV:}getlastmodified","{DAV:}creationdate","And 27 more entries, set log level to debug to see all entries"],1]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1649,"function":"writeMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\Xml\\Writer","elementMap":[],"contextUri":"/remote.php/dav/","namespaceMap":{"DAV:":"d","http://sabredav.org/ns":"s","http://owncloud.org/ns":"oc","http://nextcloud.org/ns":"nc"},"classMap":[]},{"__class__":"Generator"},false]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":346,"function":"generateMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Generator"},false]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPropFind","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:PROPFIND",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":211,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":424,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":22,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":151,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/apps/dav/lib/Connector/Sabre/Directory.php","Line":201,"Previous":{"Exception":"OCP\\Files\\StorageNotAvailableException","Message":"Sabre\\HTTP\\ClientHttpException: Not Found","Code":1,"Trace":[{"file":"/var/www/html/lib/private/Files/Storage/DAV.php","line":838,"function":"convertException","class":"OC\\Files\\Storage\\DAV","type":"->","args":[{"__class__":"Sabre\\HTTP\\ClientHttpException"},"home/home/AE Plugins"]},{"file":"/var/www/html/lib/private/Files/Storage/Wrapper/PermissionsMask.php","line":131,"function":"getDirectoryContent","class":"OC\\Files\\Storage\\DAV","type":"->","args":["home/home/AE Plugins"]},{"function":"getDirectoryContent","class":"OC\\Files\\Storage\\Wrapper\\PermissionsMask","type":"->","args":["home/home/AE Plugins"]},{"file":"/var/www/html/lib/private/Files/Cache/Scanner.php","line":457,"function":"iterator_to_array","args":[{"__class__":"Generator"}]},{"file":"/var/www/html/lib/private/Files/Cache/Scanner.php","line":414,"function":"handleChildren","class":"OC\\Files\\Cache\\Scanner","type":"->","args":["home/home/AE Plugins",false,3,2535,true,0,false]},{"file":"/var/www/html/lib/private/Files/Cache/Scanner.php","line":323,"function":"scanChildren","class":"OC\\Files\\Cache\\Scanner","type":"->","args":["home/home/AE Plugins",false,3,2535,true,-1]},{"file":"/var/www/html/lib/private/Files/View.php","line":1388,"function":"scan","class":"OC\\Files\\Cache\\Scanner","type":"->","args":["home/home/AE Plugins",false]},{"file":"/var/www/html/lib/private/Files/View.php","line":1424,"function":"getCacheEntry","class":"OC\\Files\\View","type":"->","args":[{"__class__":"OCA\\Files_Trashbin\\Storage","cache":{"__class__":"OC\\Files\\Cache\\Cache"},"scanner":{"__class__":"OC\\Files\\Cache\\Scanner"},"watcher":null,"propagator":null,"updater":null},"home/home/AE Plugins","/WebDAV/home/home/AE Plugins"]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Directory.php","line":199,"function":"getFileInfo","class":"OC\\Files\\View","type":"->","args":["/barmindaniil/files/WebDAV/home/home/AE Plugins"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Tree.php","line":95,"function":"getChild","class":"OCA\\DAV\\Connector\\Sabre\\Directory","type":"->","args":["AE Plugins"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":971,"function":"getNodeForPath","class":"Sabre\\DAV\\Tree","type":"->","args":["files/barmindaniil/WebDAV/home/home/AE Plugins"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1664,"function":"getPropertiesIteratorForPath","class":"Sabre\\DAV\\Server","type":"->","args":["files/barmindaniil/WebDAV/home/home/AE Plugins",["{DAV:}getcontentlength","{DAV:}getcontenttype","{DAV:}getetag","{DAV:}getlastmodified","{DAV:}creationdate","And 27 more entries, set log level to debug to see all entries"],1]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1649,"function":"writeMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\Xml\\Writer","elementMap":[],"contextUri":"/remote.php/dav/","namespaceMap":{"DAV:":"d","http://sabredav.org/ns":"s","http://owncloud.org/ns":"oc","http://nextcloud.org/ns":"nc"},"classMap":[]},{"__class__":"Generator"},false]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":346,"function":"generateMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Generator"},false]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPropFind","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:PROPFIND",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":211,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":424,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":22,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":151,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/lib/private/Files/Storage/DAV.php","Line":799,"Hint":"Storage is temporarily not available"},"message":"Uncaught exception","exception":[],"CustomMessage":"Uncaught exception"},"id":"691dc5f6b0c12"}

Web Browser

If the problem is related to the Web interface, open your browser inspector Console and Network tabs while refreshing (reloading) and reproducing the problem. Provide any relevant output/errors here that appear.

No errors in browser console. URL shows AE%20Plugins correctly.

Web server / Reverse Proxy

The output of your Apache/nginx/system log in /var/log/____:

Nginx access/error logs show that requests with encoded URL (%20) reach the Nextcloud container correctly.

Configuration

Nextcloud

The output of occ config:list system or similar is best, but, if not possible, the contents of your config.php file from /path/to/nextcloud is fine (make sure to remove any identifiable information!):

{
    "system": {
        "htaccess.RewriteBase": "\/",
        "memcache.local": "\\OC\\Memcache\\APCu",
        "apps_paths": [
            {
                "path": "\/var\/www\/html\/apps",
                "url": "\/apps",
                "writable": false
            },
            {
                "path": "\/var\/www\/html\/custom_apps",
                "url": "\/custom_apps",
                "writable": true
            }
        ],
        "upgrade.disable-web": true,
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "10.0.1.20",
            "nextcloud.barmindaniil.keenetic.pro"
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "pgsql",
        "version": "32.0.1.2",
        "overwrite.cli.url": "https:\/\/nextcloud.barmindaniil.keenetic.pro",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "overwritehost": "nextcloud.barmindaniil.keenetic.pro",
        "overwriteprotocol": "https",
        "trusted_proxies": "***REMOVED SENSITIVE VALUE***",
        "maintenance_window_start": "3",
        "maintenance": false,
        "config_preset": 2,
        "forbidden_filename_basenames": [
            "con","prn","aux","nul",
            "com0","com1","com2","com3","com4","com5","com6","com7","com8","com9",
            "com¹","com²","com³",
            "lpt0","lpt1","lpt2","lpt3","lpt4","lpt5","lpt6","lpt7","lpt8","lpt9",
            "lpt¹","lpt²","lpt³"
        ],
        "forbidden_filename_characters": [
            "<",">",":","\"","|","?","*","\\","\/"
        ],
        "forbidden_filename_extensions": [
            ".", ".filepart", ".part"
        ]
    }
}

Apps

The output of occ app:list (if possible).

root@e05107872a0f:/var/www/html# php occ app:list
Enabled:

  • activity: 5.0.0-dev.0
  • app_api: 32.0.0
  • bruteforcesettings: 5.0.0-dev.0
  • circles: 32.0.0
  • cloud_federation_api: 1.16.0
  • comments: 1.22.0
  • contactsinteraction: 1.13.1
  • dashboard: 7.12.0
  • dav: 1.34.2
  • federatedfilesharing: 1.22.0
  • federation: 1.22.0
  • files: 2.4.0
  • files_downloadlimit: 5.0.0-dev.0
  • files_external: 1.24.0
  • files_pdfviewer: 5.0.0-dev.0
  • files_reminders: 1.5.0
  • files_sharing: 1.24.0
  • files_trashbin: 1.22.0
  • files_versions: 1.25.0
  • firstrunwizard: 5.0.0-dev.0
  • guests: 4.6.0
  • logreader: 5.0.0-dev.0
  • lookup_server_connector: 1.20.0
  • nextcloud_announcements: 4.0.0-dev.0
  • notifications: 5.0.0-dev.0
  • oauth2: 1.20.0
  • password_policy: 4.0.0-dev.0
  • photos: 5.0.0-dev.1
  • privacy: 4.0.0-dev.0
  • profile: 1.1.0
  • provisioning_api: 1.22.0
  • recommendations: 5.0.0-dev.0
  • related_resources: 3.0.0-dev.0
  • serverinfo: 4.0.0-dev.0
  • settings: 1.15.1
  • sharebymail: 1.22.0
  • support: 4.0.0-dev.0
  • survey_client: 4.0.0-dev.0
  • systemtags: 1.22.0
  • text: 6.0.1
  • theming: 2.7.0
  • twofactor_backupcodes: 1.21.0
  • updatenotification: 1.22.0
  • user_status: 1.12.0
  • viewer: 5.0.0-dev.0
  • weather_status: 1.12.0
  • webhook_listeners: 1.3.0
  • workflowengine: 2.14.0
    Disabled:
  • admin_audit: 1.22.0
  • encryption: 2.20.0
  • suspicious_login: 10.0.0-dev.0
  • twofactor_nextcloud_notification: 6.0.0-dev.0
  • twofactor_totp: 14.0.0
  • user_ldap: 1.23.0
    root@e05107872a0f:/var/www/html#

Tips for increasing the likelihood of a response

  • Use the preformatted text formatting option in the editor for all log entries and configuration output.
  • If screenshots are useful, feel free to include them.
    • If possible, also include key error output in text form so it can be searched for.
  • Try to edit log output only minimally (if at all) so that it can be ran through analyzers / formatters by those trying to help you.