2012-05-30 32 views
0

我在同一台服务器上有一堆项目。该服务器托管SVN回购和实际的Web项目。我想有这样的结构:另一个“svn:Repository永久移动请重新定位”问题

project1.server.com - with doc root to /var/www/html/project1/public 
project2.server.com - with doc root to /var/www/html/project2/public 
project3.server.com - with doc root to /var/www/html/project3/public 

并能够与此网址

svn.server.com/project1 - with repo root at /var/www/svn/project1/ 
svn.server.com/project2 - with repo root at /var/www/svn/project2/ 
svn.server.com/project3 - with repo root at /var/www/svn/project3/ 

我目前CONFIGS访问每一个SVN回购是:

<VirtualHost *:80> 
     ServerName project1.server.com 
     DocumentRoot "/var/www/html/project1/public" 
     RewriteEngine off 
     <Location /> 
       RewriteEngine on 
       RewriteCond %{REQUEST_FILENAME} !-f 
       RewriteCond %{REQUEST_FILENAME} !-d 
       RewriteRule !\.(js|ico|gif|jpg|png|css)$ /index.php 
     </Location> 
</VirtualHost> 

# ... similar <VirtualHost> tags here for the other web subdomains 

<VirtualHost *:80> 
     ServerName svn.server.com 
     <Location /> 
       Deny from all 
     </Location> 

     <Location /project1> 
       Allow from all 
       AuthType Basic 
       AuthUserFile /etc/svn-auth-conf 
       Require valid-user 
       DAV svn 
       SVNPath /var/www/svn/project1 
       AuthName "Project 1 - Development Repository" 
       AuthzSVNAccessFile /etc/svn-acl-conf 
     </Location> 

# ... similar <Location> tags for the other repos 

</VirtualHost> 

如果我改变DocumentRoots到/ var/www/html/project1-site/public之类的东西不一样,所以我很确定发生了什么是this

也有可能您的web根目录中的对象与您的存储库URL具有相同的名称。例如,假设您的Web服务器的文档根目录是/ var/www,并且您的Subversion存储库位于/ home/svn/repo。然后,您将Apache配置为在http://server.com/myrepo处提供存储库。如果您然后创建目录/ var/www/myrepo /这将导致301错误发生。

但我真的想保持像上面显示的目录结构。我该怎么做才能使它工作?我想要这样做,因为它是我可以提出的更整洁的结构。所以想法也被接受!

回答

1

您可以尝试更改SVN v主机的端口(我认为SVN通常使用3690)。现在你对这两种协议使用相同的根路径(Location /)和相同的端口(80),所以Apache无法区分这两种请求。

一些更多的信息在这里:http://en.wikipedia.org/wiki/Apache_Subversion#Repository_access

请注意,您的SVN用户还必须使用此端口。不知道这对你是否合适。

+0

好主意。但这会使客户端连接稍微复杂一些。我仍然不确定为什么'http:// project.server.com'和'http:// svn.server.com/project'是两个不可区分的请求。 – Mauro

+1

我更喜欢为了清楚而更改端口,但如果这不是一个选项,您可以更改域(冒号前的部分)。例如。 ''和''。如果你需要更多的细节,这里的apache文档是[here](http://httpd.apache.org/docs/2.0/mod/core.html#virtualhost)。 – pieman72