我正在尝试使用 Apache 上的 DAV 配置 SVN 服务器。根据互联网资源(例如https://help.ubuntu.com/10.04/serverguide/subversion.html),在 Ubuntu 上安装所有这些应该非常简单。而且,在安装和创建第一个存储库期间没有出现任何错误,除了在初始导入项目文件时出现问题(我通过 HTTP 访问存储库)。我在 SVN 客户端(KDESVN)中看到的是以下消息:
Server sent unexpected return value (500 Internal Server Error) in response to PROPFIND request for 'http://.../svn/myproject/trunk/test.txt'
Apache 和我在 DAV 中配置的error.log
自定义日志中没有关于此错误的任何信息。其中有几行记录了此活动,其中包括这一行:svn.log
access.log
{IP} - - [18/Mar/2014:22:47:24 -0300] "PROPFIND /svn/myproject/trunk/test.txt HTTP/1.1" 500 1150 "-" "SVN/1.7.9/SvnQt wrapper client neon/0.29.6"
没有更多细节。
我的配置如下。
/etc/apache2/mods-enabled/dav_svn.conf:
<Location /svn>
DAV svn
SVNParentPath /var/www/svn-repos
SVNListParentPath On
#SVNPathAuthz Off
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/passwd
Require valid-user
LimitXMLRequestBody 0
</Location>
CustomLog ${APACHE_LOG_DIR}/svn.log "%t %u %{SVN-ACTION}e" env=SVN-ACTION
权限/var/www/svn-repos
:
sudo chmod -R 777 /var/www/svn-repos
sudo chown -R www-data:www-data /var/www/svn-repos
添加了一位用户,/etc/apache2/passwd
我在 KDESVN 和命令行中使用其数据--username
和--password
参数。
版本:
- Ubuntu 12.04.4 LTS i386
- 阿帕奇/2.2.22
- SVN 1.6.17(r1128011)
我能够创建初始存储库结构 (/trunk、/tags、/branches),使用 进行本地提交file:///...
,并且能够在客户端或浏览器中列出它。但是当我使用commit
从远程计算机执行此操作时http://
,会出现上述错误。
我尝试了所有能找到的解决此错误的方案:
- 将存储库位置从 /home/svn 更改为 /var/www/svn-repos
- 更改存储库权限和所有权(我检查了两次,www-data 是 Apache 的用户)——即使使用荒谬的 777 也无济于事
DAV svn \ SVNParentPath /var/www/svn-repos
仅保留DAV 配置中的部分- 更改
loglevel
为- 我在debug
日志apache2.conf
中看不到更多有用的信息
没什么帮助。仍然是同样的错误。
有没有办法配置更好的日志记录,只是为了看看这是什么谜500 Internal Server Error
? 如何找出我遗漏了什么?
对于您的建议,我提前表示感谢。
答案1
尝试启用重写日志以验证您没有干扰 dav_svn 的 mod_rewrite 规则。我在 usvn 上遇到了同样的问题。
您可以通过以下方式启用重写日志记录(请确保在完成调试后禁用此功能):
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
RewriteLogLevel 3
我通过在 .htaccess 文件中添加一行来排除 dav_svn 存储库的子目录来解决我的问题:
<Files *.ini>
Order Allow,Deny
Deny from all
</Files>
php_flag short_open_tag on
php_flag magic_quotes_gpc off
RewriteEngine on
#RewriteCond
RewriteBase "//usvn/"
RewriteRule ^svn/ - [L,NC] # This is the line I added to exclude this path
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]