2011-07-08 18 views
0

我在一臺機器上運行了多個虛擬主機,並且我想重寫從一個虛擬主機到另一個虛擬主機的一條路徑。我原來的計劃是使用國防部重寫,但我堅持絕對的網址。有沒有辦法將apache2中的路徑重定向到另一個虛擬主機

我想以下行爲,(不使用301個重定向。):

<VirtualHost *:80> 
    <Directory /var/lib/wsgi> 
    Order allow,deny 
    Allow from all 
    </Directory> 

    ServerName sub1.example.com 
    WSGIScriptAlias//var/lib/wsgi/sub1.wsgi 
    WSGIDaemonProcess sub1 display-name=%{GROUP} 
    WSGIProcessGroup sub1 

    RewriteEngine on 
    RewriteRule ^/sub2/(.*)$ http://sub2.example.com/sub2/$1 [PT] 

</VirtualHost> 

<VirtualHost *:80> 
    <Directory /var/lib/wsgi> 
    Order allow,deny 
    Allow from all 
    </Directory> 

    ServerName sub2.example.com 
    WSGIScriptAlias//var/lib/wsgi/sub2.wsgi 
    WSGIDaemonProcess sub2 display-name=%{GROUP} 
    WSGIProcessGroup sub2 
</VirtualHost> 

我運行一個Python WSGI應用:

http://sub1.example.com/sub2 -> sub2.example.com virtual host 
# Everything but sub2/.* 
http://sub1.example.com/  -> sub1.example.com virtual host 
http://sub2.example.com/  -> sub2.example.com virtual host 

我是用下面的配置測試了這一點在每個子域中。當您訪問http://sub1.example.com/sub2時,apache2返回「400錯誤請求」並將其放入日誌文件中。

[Fri Jul 08 16:09:05 2011] [error] [client 127.0.0.1] Invalid URI in request GET /sub2/ HTTP/1.1 

我也曾嘗試使用ServerPath的SUB2域之內,但也不能正常工作。

回答

1

如果你沒有做任何修改URL /花哨的匹配,爲什麼不嘗試

<VirtualHost ...> 
    // sub1 site 
    Redirect /sub2 http://sub2.example.com 
</VirtualHost> 

mod_rewrite的是,當你真正需要的是豌豆射手重炮。

也就是說,或使用一個別名:

Alias /sub2 /full/path/to/equivalent/directory/in/sub2 
+0

重定向將客戶端發送到另一個站點。我想從sub1中訪問站點的客戶端隱藏sub2虛擬主機。別名僅適用於磁盤上的路徑,並且不允許您修改主機名。 – user835673

+0

然後使用別名,它會使sub2網站中/ sub2下的sub2網站的內容可用。 –

+1

從我讀過的內容中,您不能使用別名將流量定向到其他虛擬主機。如果sub2正在提供靜態文件,但是它正在運行WSGI腳本,則這會起作用。 – user835673

相關問題