The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

設定 Subversion 存取權限時若有中文名稱需注意文件編碼

安裝 Subversion 到 Windows 平台可參考這篇文章,但是在設定 Subversion 存取權限時卻需要注意關於中文目錄名稱的問題,我最近在設定 Subversion 存取權限時就遇到一個用中文命名的目錄怎樣都無法設定成功,所有被賦予這個目錄權限的人都無法存取,永遠都會回應 403 Forbidden 的錯誤訊息(如下):

Server sent unexpected return value (403 Forbidden) in response to OPTIONS 
request for 'https://example.com/repos/project1/trunk'

我也去查詢 Apache 的 error log 發現這樣的訊息:

Access denied: 'username' GET project1:/trunk/\xe4\xb8\xad\xe6\x96\x87\xe7\x9b\xae\xe9\x8c\x84

我再去看 authz.ini 設定:

[project1:/trunk/中文目錄]
@dev-team=rw
username=rw

然後我再試著將中文改成 UrlEncode 與 Hex 的格式,卻還是都不行:

[project1:/trunk/中文目錄]
@dev-team=rw
username=rw
[project1:/trunk/\xe4\xb8\xad\xe6\x96\x87\xe7\x9b\xae\xe9\x8c\x84]
@dev-team=rw
username=rw
[project1:/trunk/%e4%b8%ad%e6%96%87%e7%9b%ae%e9%8c%84]
@dev-team=rw
username=rw

分析至此,我直覺的認為應該是 Unicode 的問題了,然後我就將此檔改成 UTF-8 ( 含 BOM 字元 ),改完後卻更慘,從 Apache error log 中查到 "Section header expected" 的錯誤:

Failed to load the AuthzSVNAccessFile: D:\\SVNRepository\\authz.ini:1: Section header expected
Access denied: 'username' GET project1:/trunk

又試了一會兒原本要放棄了,但多堅持個 20 分鐘終於被我試出來,原來只要將檔案格式改成 UTF-8 without BOM 即可,如果你用 Notepad++ 可以參考以下圖示修改 authz.ini 檔案的編碼:

Notepad++: 編譯成 UTF-8(檔首無 BOM)

改完存檔之後就一切正常了,以後可以放心的在 Subversion 中使用中文命名了。