2009-12-22 49 views
4

我正在嘗試在Windows Server 2008下的Apache2上配置SVN Web訪問權限以獲得不同的寫入權限。如何爲不同的寫權限配置SVN網頁訪問?

我旁邊的Apache2的conf:

<Location /svn> 
SVNParentPath "E:\SVN" 

DAV svn 
SVNListParentPath on 
AuthType Basic 
AuthName "Subversion repositories" 
Require valid-user 

AuthUserFile svn-auth.txt 
AuthzSVNAccessFile svn-acl.txt 
</Location> 

<Location /svn/foobar> 
SVNParentPath "E:\SVN\foobar" 

DAV svn 
SVNListParentPath on 
AuthType Basic 
AuthName "Subversion repositories" 
Require valid-user 

AuthUserFile svn-auth.txt 
AuthzSVNAccessFile svn-acl.txt 
</Location> 

E:\SVN是所有存儲庫根目錄 - 我想列出所有。它包含E:\SVN\test - 是一個項目存儲庫。

E:\SVN\foobar - 是包含 E:\SVN\foobar\fooE:\SVN\foobar\bar - 項目存儲庫的子根目錄。

文件svn-auth.txt包含htpasswd.exe

文件svn-acl.txt生成包含一個寫訪問規則的一些用戶的密碼,但它不工作!事件它只包含一個全局權限:

[/] 
* = rw 

什麼是Apache2的配置SVNPathSVNParentPath之間的不同爲SVN?也許這是有道理的?

當然,如果我添加一組或用戶不太多工作:

[groups] 
full = abatishchev 

[/] 
* = r 
@full = rw 
abatishchev = rw 

我越來越403 Forbiden

我在做什麼錯? TIA!

更新:我發現從error.log中記錄:

The URI does not contain the name of a repository. [403, #190001] 

什麼這可能意味着什麼?

+0

這應該是在serverfault.com – Gonzalo 2009-12-22 18:59:03

+0

不幸的是,我沒有找到答案.. – abatishchev 2009-12-22 19:00:55

+0

什麼是在serverfault.com的鏈接? – 2009-12-22 19:37:50

回答

2

更改Apache的配置

<Location /svn> 

<Location /svn/> 

修復的目錄403錯誤的上市

+2

通過閱讀您在ServerFault上的其他PR,我意識到您的錯誤消息來自哪裏,太糟糕了,您也沒有把它放在這裏。你可以簡單地使用'RedirectMatch ^(/ svn)$ $ 1 /'指令來避免這個問題,它會在'http:// /svn'後面自動追加一個斜槓(參見我的修改示例)。 – RedGlyph 2009-12-23 17:44:36

5

SVNPath用於一個存儲庫,SVNParentPath用於包含多個存儲庫的根目錄。因此,如果您嘗試訪問http://<host>/svn/foobar,則應刪除Apache配置文件中的第二個位置,因爲它與第一個位置衝突。

您應該爲訪問和身份驗證文件設置絕對路徑,確保Apache服務具有對父目錄和所有存儲庫的讀/寫訪問權限,並且可以讀取這些訪問和身份驗證文件的訪問權限,手動安裝。

例如:

<Location /svn> 
    RedirectMatch ^(/svn)$ $1/ 
    SVNParentPath E:\SVN 

    DAV svn 
    SVNListParentPath on 
    AuthType Basic 
    AuthName "Subversion repositories" 
    Require valid-user 

    AuthUserFile C:\SVN\conf\svn-auth.txt 
    AuthzSVNAccessFile C:\SVN\conf\svn-acl.txt 
</Location> 

你會發現在Version Control with Subversion所有必要的信息(這是鏈接到最新版本,雖然Apache的配置設置,最近沒有發生變化)。

然後,您應該能夠爲您的存儲庫指定組和用戶的全局或個人權限。這樣的例子可以發現here,用你給的名字:

[groups] 
full = abatishchev, anotherguy 
main = abatishchev 

[/] 
* = r 
@full = rw 
abatishchev = rw 

[foobar:/] 
* = 
@main = rw 
full = r 

[otherproject:/] 
@main = rw 
full = r 

在這個例子中,你已經在[/]設置一般規則,那麼就會盛行foorbar(一切下文)特定的規則,並otherproject。您甚至可以爲存儲庫的單個目錄指定特定的規則。

+0

謝謝!我有我的輔助apache配置條目,因爲e:\ svn可能包含e:\ svn \ foo(repo)和e:\ svn \ bar(具有repos數目的目錄)。因此,每個回購根目錄需要自己的位置條目 – abatishchev 2009-12-22 21:16:42

+1

您可以在Apache'Location'指令中使用正則表達式來排除次級根,也許這可能有助於將兩者分開並避免衝突。如果你需要幾個可能在一段時間後變得笨拙的子目錄:一個'svnserve' SVN服務器允許任意的存儲庫結構,這將使你的配置變得更簡單(你可以有子目錄,不需要指定它們)。它也不那麼重,並且減少了網絡帶寬。 – RedGlyph 2009-12-22 23:46:05

+0

你的想法聽起來很酷,但不幸的是,這並沒有幫助。根目錄下的repo工作(e:\ svn \ some-proj),但是在子目錄下的repo - 不是:「無法打開請求的SVN文件系統」(e:\ svn \ some-dir \ some-proj)。你有沒有其他的Apache conf技巧來實現你所描述的任務? – abatishchev 2009-12-23 20:17:54

2

這不是直接回答你的問題,它總是很大的問題從現在開始從頭開始學習東西,但看到你在Windows機器上時,我想我會提到VisualSVN server。這是一個點擊,非常好的配置封裝到SVN二進制文件,也提供了自己的Web訪問。

+0

謝謝!我嘗試過這個。不幸的是,它只支持一個存儲庫的根目錄。根目錄下的所有文件夾必須已經是存儲庫。但我有一個數字子目錄(類別),只有存儲庫和位於 – abatishchev 2009-12-23 20:30:32