Назад | Перейти на главную страницу

Как сопоставить аутентифицированных пользователей Apache с их собственным каталогом?

Я пытаюсь предложить нашим пользователям пространство Apache WebDav, где они могут хранить свои файлы календаря (.ics). У меня уже работает проверка подлинности Dav и LDAP. Но я не могу сажать пользователей в некоторые подкаталоги. В конце концов, я не хочу, чтобы они имели доступ к файлам календаря друг друга.

Пример: скажем, пользователь Джон Доу входит в систему. Тогда я бы хотел его "/"путь будет сопоставлен с / var / www / users / johndoe на диске. Чтобы у каждого пользователя был свой каталог.

Что я пробовал до сих пор:

  1. UserDir / var / www / users / * /

    но похоже, что этот каталог просто устанавливает путь для / ~ johndoe / requests, чего я не хочу.

  2. RewriteRule ^ / / users /% {REMOTE_USER} [R]

    Не получается. И, вероятно, это просто переписывание пути, чего я не хочу.

  3. AliasMatch ^ / / var / www / users /% {REMOTE_USER} /

    Это должно отобразить путь к каталогу на диске, но% {REMOTE_USER} не расширяется.

Можно ли заключить авторизованных пользователей в какой-нибудь подкаталог? Заранее спасибо.

Если вы хотите использовать префикс каталога вместо «/», вы можете использовать что-то вроде этого:

# Let's setup WebDAV first
<Directory /var/lib/storage>
        Dav On
        Options Indexes
        AllowOverride None
</Directory>
# Now we'll set up the user area mapping
RewriteCond %{REQUEST_URI} ^/storage/
RewriteRule ^/storage/(.*?)$ /var/lib/storage/user/%{LA-U:REMOTE_USER}/$1 [L]

Более того, к тем же пользовательским каталогам можно получить доступ только для чтения с использованием синтаксиса / ~ user /

# Public area can be accessed as https://server/~user/
RewriteCond %{REQUEST_URI} ^/~
RewriteCond %{REQUEST_METHOD} ^(GET|POST)$
RewriteRule ^/~([^/]+)/?(.*)    /var/lib/storage/user/$1/$2 [L]

YMMV