如何解决Horde Framework+lighttpd下CalDAV/CardDAV连接失败问题
问题描述
在Debian 11(bullseye)系统上,使用Horde Framework 5.2.23和lighttpd 1.4.59搭建CalDAV/CardDAV服务,但iPhone或Thunderbird无法连接,怀疑lighttpd的URL重写配置存在问题。
使用版本
- Debian 11(bullseye)
- Lighttpd 1.4.59
- Horde Framework 5.2.23
当前lighttpd配置
$HTTP["host"] == "dav.test.de" { url.rewrite-if-not-file = ("" => "/rpc.php") }
执行的curl查询
curl.exe -X PROPFIND --basic --user "username:password" dav.test.de
返回结果
<?xml version="1.0" encoding="utf-8"?> <d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns"> <s:exception>Sabre\DAV\Exception\Forbidden</s:exception> <s:message>Requested uri (/) is out of base uri (/rpc.php/)</s:message> <s:sabredav-version>1.8.12</s:sabredav-version> </d:error>
解决思路
- 修正lighttpd重写规则
当前规则将根路径直接指向/rpc.php,但SabreDAV(Horde底层依赖的DAV库)需要保留原始请求路径才能正确匹配Base URI。修改重写规则,把所有请求转发到/rpc.php并附带原路径:
$HTTP["host"] == "dav.test.de" { url.rewrite-if-not-file = ( "^/(.*)$" => "/rpc.php/$1" ) }
这样无论是根路径/还是子路径(如/calendars/user/),都会被正确转发,让SabreDAV识别到合法的请求URI。
检查Horde的Base URI配置
打开Horde的DAV配置文件(通常位于conf.d/dav.php),确认base_uri设置正确。如果所有请求都通过/rpc.php处理,可将base_uri设为/rpc.php/,或留空让系统自动检测。验证配置并重启服务
重启lighttpd使配置生效:
systemctl restart lighttpd
再次用curl测试:
curl.exe -X PROPFIND --basic --user "username:password" dav.test.de
若返回包含用户日历/通讯录列表的正常DAV响应,说明重写规则已修复问题。
- 确认lighttpd模块启用状态
确保mod_rewrite模块已启用,Debian系统下执行以下命令启用:
lighttpd-enable-mod rewrite
启用后重启lighttpd服务。
内容的提问来源于stack exchange,提问作者julian
相关产品推荐
相关产品推荐

