我如何定制“403 Forbidden”信息? 只有这条消息,我想添加额外的信息,比如这个“403 Forbidden(你没有权利[URL to repository])”。 怎么做? 我想保存与任何svn工具的兼容性,如本地svn客户端,乌龟,java程序员环境等。
– 编辑 –
我的环境:
操作系统:Linux Debian
SVN:1.8.8
访问协议:Apache和DAV svn的HTTP
auth protolol config:authzsvnaccess
所有作品像我想要的,除了禁止的消息。 这个误导用户。 他们认为问题是与服务,但真正的问题是与访问权限。
您可以使用Apache( http://httpd.apache.org/docs/current/custom-error.html )自定义错误文本/文档,但是这对您不利。
错误消息embedded到客户端源代码( 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,乌龟)使用相同或非常相似的HTTP客户端库,所以你会有同样的问题:没有设施路由自定义错误消息从服务器到客户端时,客户端被密码失败或authz拒绝。
然而,如果这是你真正需要的东西,那么你可能会在pre-commit
钩子中特殊处理必要的path,因为当钩子脚本以非零状态存在时, stdout
的内容被反馈给用户,你可以拥有它说任何你喜欢的。
问题是请求必须首先被authentication,所以像这样的解决scheme可能会打破你的许可模式,除非是针对一个非常特定的情况。 (你总是可以定制客户端,但是我怀疑这比你愿意去的更进一步)