Я настроил Apache2, чтобы разрешить WebDav в каталоге (CentOS 5 / Plesk 8.6):
в моем vhost.conf у меня есть:
<Directory /var/www/vhosts/domain.com/httpdocs/target_dir> Dav On AllowOverride none Order allow,deny Allow from all </Directory>
Я могу подключиться к каталогу с помощью проверки подлинности и загружать из него файлы. Но я не могу писать в реж. Я получаю ошибку 403 при попытке загрузить или создать каталог.
У кого-нибудь есть советы?
Заранее спасибо -
Обновление - 6/5 Используя комментарии ниже, я выделил проблему как некоторый конфликт с каталогами, защищенными .htpasswd. Я могу создать незащищенный каталог и разрешить загрузку WebDAV в порядке. Но как только я включаю базовую аутентификацию в каталоге, все идет на юг. Я могу читать, но больше не загружаю.
Это мой vhost.conf:
<Directory /var/www/vhosts/domain.com/subdomains/subdomain/httpdocs/> AuthUserFile /var/www/.htpasswd AuthName "Login" AuthType Basic Require valid-user DAV on AllowOverride none <Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Require valid-user </Limit> </Directory>
Обновление 6/6
С минимальными усилиями удалось заставить WebDAV работать в другом домене. Единственная разница между этими двумя доменами заключается в том, что в том, который отказывается разрешать доступ для записи, у меня есть директива DocumentRoot:
DocumentRoot /var/www/vhosts/domain.com/httpdocs/app/webroot
Может это вызвать проблемы?
Та же проблема. Решено:
<Location /xyz>
DAV On
AuthType Digest
AuthName "webdav-xmarks"
AuthDigestProvider file
AuthUserFile "/home/xy/xba/digest-password"
Require valid-user
RewriteEngine off <-- this part solved it!
</Location>
Недавно я столкнулся с той же проблемой в своей системе Fedora 10. В моем случае виновником было какое-то странное перенаправление, которое я делал в Apache. В частности, я использую систему управления контентом (точнее, Drupal), которая в .htaccess включает следующую логику перенаправления для перенаправления отсутствующих файлов в сценарий PHP:
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Имеет смысл, что приведенное выше влияет только на метод PUT, поскольку в этом случае REQUEST_FILENAME не существует.
Отсутствие области WebDAV внутри области Drupal, что кажется разумным ограничением, решает проблему.
Кроме того, я думаю, что SELinux скорее всего приведет к другой ошибке, но это не упоминается в обсуждении выше. Вы пробовали отключить SELinux?
Та же проблема.
Решено путем создания файла .htaccess в каталоге webdav с помощью:
RewriteEngine off
Найдено здесь: http://annoyingtechnicaldetails.wordpress.com/2007/07/20/webdav-vs-drupal-htaccess-redirect-rules/
Что говорит ваш error_log? Это первое место, куда нужно смотреть.
Также загляните в обычный журнал access_log; иногда некоторые клиенты DAV будут пытаться выполнять действия с DAV в каталогах более высокого уровня, чем те, в которых вы выполняете свою работу, что требует от них, по крайней мере, доступа к DAV только для чтения вплоть до корня виртуального хоста.
Вы пробовали использовать лимит: (например)
<Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require valid-user
</Limit>
Как сказал Рам Прасад, вам понадобится этот оператор Limit в записи каталога в вашем файле vhosts.config.
Вам также понадобится каталог .DAV, принадлежащий apache, в том же каталоге, что и ваш файл .htaccess. Я обнаружил, что это обычно вызывает ошибку 403, поскольку Apache использует эту папку для записи временных файлов.
Смотрите также: http://www.webdav.org/mod_dav/install.html