0

我在同一台服务器上有一堆项目。该服务器同时托管 SVN 存储库和实际的 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 之类的其他内容,则效果很好,因此我很确定正在发生的事情是这样的:

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

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

4

2 回答 2

1

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

更多信息:http ://en.wikipedia.org/wiki/Apache_Subversion#Repository_access

请注意,您的 SVN 客户端也必须使用此端口。不确定这是否适合您。

于 2012-05-31T06:51:23.420 回答
0

如果要将存储库保留在文档根目录中,可以使用 url
svn+ssh://<absolute_path_to_repository>
而不是
http://<document_root_relative_path_to_repository>
访问它。您需要 ssh 访问权限和凭据。

于 2020-10-28T12:03:39.863 回答