我如何自定义“403 禁止”消息?对于此消息,我只想添加其他信息,例如“403 禁止(您无权访问 [存储库 URL])”。如何操作?我希望保留与任何 svn 工具的兼容性,例如本机 svn 客户端、tortoise、java 程序员环境等。
- 编辑 -
我的环境:
操作系统:Linux Debian
SVN:1.8.8
访问协议:Apache 和 DAV 的 HTTP(s) svn
auth protolol 配置:authzsvnaccess
一切都如我所愿,除了禁止信息。这误导了用户。他们认为问题出在服务上,但实际上问题出在访问权限上。
答案1
您可以使用 Apache 自定义错误文本/文档(http://httpd.apache.org/docs/current/custom-error.html),但这对您没有帮助。
错误消息嵌入在客户端源中(subversion/libsvn_ra_serf/util.c
):
svn_ra_serf__error_on_status(serf_status_line sline,
const char *path,
const char *location)
{
switch(sline.code)
{
case 301:
case 302:
case 307:
return svn_error_createf(SVN_ERR_RA_DAV_RELOCATED, NULL,
(sline.code == 301)
? _("Repository moved permanently to '%s';"
" please relocate")
: _("Repository moved temporarily to '%s';"
" please relocate"), location);
case 403:
return svn_error_createf(SVN_ERR_RA_DAV_FORBIDDEN, NULL,
_("Access to '%s' forbidden"), path);
不用查看,我怀疑其他客户端(SmartSVN、Tortoise)使用相同或非常相似的 HTTP 客户端库,因此您会遇到同样的问题:当客户端因密码失败或身份验证而被拒绝时,没有用于将自定义错误消息从服务器路由到客户端的工具。
但是,如果这是您真正需要的,那么您可能能够在钩子中对必要的路径进行特殊处理pre-commit
,因为当钩子脚本具有非零状态时,其内容stdout
将反馈给用户,您可以让它说出任何您喜欢的内容。
问题在于请求必须先经过身份验证,因此除非是针对非常具体的单一案例,否则这样的解决方案可能会破坏您的权限模型。(您始终可以自定义客户端,但我怀疑这超出了您的意愿)