Linux
SVN自定義403錯誤資訊
如何自定義“403 Forbidden”消息?僅對於此消息,我想添加其他資訊,例如“403 Forbidden(您無權
$$ URL to repository $$)" . 怎麼做?我想保存與任何 svn 工具的兼容性,如原生 svn 客戶端、烏龜、java 程序員環境等。
- 編輯 -
我的環境:
作業系統:Linux Debian
SVN:1.8.8
訪問協議:Apache 和 DAV 的 HTTP(s) svn
auth protolol 配置:authzsvnaccess
所有的作品都像我想要的一樣,除了禁止的消息。這會誤導使用者。他們認為問題在於服務,但真正的問題在於訪問權限。
您可以使用 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 客戶端庫,所以你會遇到同樣的問題:當客戶端時,沒有將自定義錯誤消息從伺服器路由到客戶端的工具被密碼失敗或 authz 拒絕。
但是,如果這是您真正需要的東西,那麼您可以在
pre-commit
鉤子中對必要的路徑進行特殊處理,因為當鉤子腳本以非零狀態存在時,內容stdout
會回饋給使用者,您可以讓它說你喜歡的任何東西。問題是必須首先對請求進行身份驗證,因此這樣的解決方案可能會破壞您的權限模型,除非它是針對非常具體的單一案例。(您始終可以自定義客戶端,但我懷疑這比您願意為此更進一步)