2016-06-08 5 views
0

У меня проблема с RewriteRule, которая работает (более или менее) в html-view с браузером, но не как WebDav-сервис с клиентом (davfs или tadaver под linux). Я чувствую, что это связано с RewriteRule.Ошибка Apache RewriteRule для службы WebDAV

Что я хочу сделать: Из URL-перспективы: Есть папку/Users/кого-то, где кто является индивидуальным именем пользователя. И я хочу иметь shortcut/private, который указывает прямо на каталог/users/myusername, где у меня есть доступ на запись. В файловой системе у меня есть/storage/davroot для DAV и DocumentRoot и/storage/davusers для всех пользовательских каталогов. Обратите внимание, что пользовательские диски не находятся внутри DocumentRoot, что делает его несколько сложным.

Мое текущее решение заключается в следующем:

# 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> 

Что правильно: Почти весь браузер точка зрения верна. За исключением одной проблемы: URL/частный/правильно указан, строка url остается/закрыта/(требуется поведение). Но url/private переводится на/users/username /, а также изменяется строка url на этот адрес. Зачем?

Если я вхожу в систему с помощью клиента webdav (davfs), тема становится еще страннее. Частная папка пуста, папка пользователей недоступна. С трупом частная папка недоступна, и папка пользователей отображается правильно.

ответ

0

Плохая идея. Перезапись часто отлично подходит для «немых» конечных точек HTTP, таких как файлы, но для WebDAV это изменяется.

Проблема в том, что HTTP-запросы WebDAV, такие как PROPFIND, возвращают результаты, содержащие URL-адреса. Эти URL-адреса должны соответствовать любому URL-адресу, который вы использовали для доступа к ресурсу.

Переписывание Apache работает только с входящими запросами. Это не «живое изменение» исходящих xml-ответов, чтобы они соответствовали тому, что вошло.

Здравый смысл делать в таких случаях, чтобы не переписывать, а просто перенаправлять. Не каждый клиент может это поддержать, но, по крайней мере, ваш сервер работает разумно предсказуемым образом и согласно спецификации.

Другая возможность - использовать что-то вроде AliasMatch, потому что эта директива фактически делает материал с локальным путем, а не только с URL-адресом. Если вы можете заставить его работать, я полагаю, что mod_webdav будет продолжать вести себя разумно.

Но я не уверен, что AliasMatch может использовать заголовки, такие как REMOTE_USER.