Apache:将一个虚拟主机映射到另一个虚拟主机的子目录

Apache:将一个虚拟主机映射到另一个虚拟主机的子目录

我正在尝试将一个虚拟主机映射到另一个虚拟主机的子目录,如下所示http://host2.com -> http://host1.com/host2。目前,每当我访问http://host2.com它映射到http://host1.com代替http://host1.com/host2

我的默认站点文件是这个

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName "host1.com"

 <Directory /srv/www/host1>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order deny,allow
    Allow from all
 </Directory>

 DocumentRoot /srv/www/host1
 WSGIScriptAlias / /srv/www/host1/apache/django.wsgi

 </VirtualHost>

<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    ServerName "host2.com"
    DocumentRoot /srv/www/host1

    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>

    ProxyPass / http://host1.com/host2
    ProxyPassReverse / http://host1.com/host2

</VirtualHost>

我错过了什么?我不确定这是否重要,但我正在使用带有 wsgi 的 Django。

答案1

<VirualHost />实际上,这可以通过使用单个ServerAlias指令来实现。然后,您可以使用RewriteRule将这些请求传递到正确的目录,而通过省略,[R]您只需重写请求,而 URL 保持不变。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName host1.com
    ServerAlias host2.com

    <Directory /srv/www/host1>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order deny,allow
        Allow from all
    </Directory>

    DocumentRoot /srv/www/host1
    WSGIScriptAlias / /srv/www/host1/apache/django.wsgi

    RewriteEngine On
    RewriteCond %{HTTP_HOST} host2\.com [NC]
    RewriteRule (.*) /host2$1 [L]
</VirtualHost>

希望这可以帮助。

答案2

这是另一篇可能有帮助的帖子: 重新定位

我还没有在下面测试过这个,但是你应该明白了。

您可以使用重定向:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.host2\.com [NC]

RewriteRule ^(.*)$ http://host1\.com\host2 [L,R=301]

相关内容