我在同一台服务器上有很多项目。该服务器托管SVN repos和实际的Web项目。我想要这个结构:
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
并且能够使用此URL访问每个SVN仓库
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/
我目前的配置是:
<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错误发生。
但我真的想保留上面显示的目录结构。我该怎么办才能让它发挥作用?我希望这样,因为它是我能想到的更整洁的结构。所以也接受了想法!
答案 0 :(得分:1)
您可以尝试更改SVN v-host的端口(我认为SVN通常使用3690
)。现在,您对两种协议使用相同的根路径(Location /
)和相同的端口(80
),因此Apache无法区分这两种请求。
此处提供更多信息:http://en.wikipedia.org/wiki/Apache_Subversion#Repository_access
请注意,您的SVN客户端也必须使用此端口。不确定这对你是否合适。
答案 1 :(得分:0)
如果要将存储库保留在文档根目录中,则可以使用url访问它
svn + ssh://
代替
http://
您需要ssh访问权限和凭据。