我在同一台服务器上有一堆项目。该服务器同时托管 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 错误。
但我真的很想保持上面显示的目录结构。我应该怎么做才能让它工作?我想要这样,因为它是我能想出的更整洁的结构。所以想法也被接受了!