![一個 VirtualHost 用於某些 URL,另一個 VirtualHost 用於 Apache 中的所有其他 URL](https://rvso.com/image/623651/%E4%B8%80%E5%80%8B%20VirtualHost%20%E7%94%A8%E6%96%BC%E6%9F%90%E4%BA%9B%20URL%EF%BC%8C%E5%8F%A6%E4%B8%80%E5%80%8B%20VirtualHost%20%E7%94%A8%E6%96%BC%20Apache%20%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%85%B6%E4%BB%96%20URL.png)
是否可以將Apache 配置為讓不同的虛擬主機偵聽相同的IP 位址、相同的端口,以便某些路徑(不是完整域,只是本地路徑)將指向一個虛擬主機,而其他路徑將預設指向另一個虛擬主機?
例如:
#All requests to www.mysite.com/special-url go here
<VirtualHost /special-url:80>
DefaultType application/x-httpd-php
ServerName server1
Document Root "/home/me/server1"
<Directory "/home/me/server1">
AllowOverride None
Order allow, deny
allow from all
</Directory>
</VirtualHost>
#All other requests go here
<VirtualHost *:80>
DefaultType application/x-httpd-php
ServerName server1
Document Root "/home/me/server2"
<Directory "/home/me/server2">
AllowOverride None
Order allow, deny
allow from all
</Directory>
</VirtualHost>
此伺服器配置不起作用,向第一個VirtualHost
標記添加通配符組合(例如VirtualHost */special-url:80
)也不起作用。相反,當我運行此命令時,Apache 將請求定向/special-url
到/home/me/server1
.但如果我查找/foo
它仍然會查找 inserver1
並返回,404
即使有一個名為foo
in的目錄/home/me/server2
。
有沒有辦法讓一個 VirtualHost 只用於某些 URL,而另一個 VirtualHost 則用於所有其他 URL?
答案1
事情不是這樣的。虛擬主機基於 IP 位址或主機名,而不是路徑。但您也可以採取其他一些措施來實現相同的目標:
- 如果
server1
虛擬主機有單獨的主機名,您可以進行重定向 - 如果您只想從該 URL 的不同路徑提供內容,則可以使用 來對應該
AliasMatch
路徑 - 您可以
mod_rewrite
根據您的規格進行 URL 重寫
如果不了解您到底想要實現什麼目標,我無法比這更具體。但我相信有關將 URL 對應到文件系統的 Apache 文檔將為您提供一個良好的起點。
答案2
聽起來這可能是 Apache 代理模組的工作。
查看 ProxyPass 指令:
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
答案3
虛擬主機用於處理請求的網域部分,以便您可以在同一台伺服器上託管多個網域。
您可以使用別名或重寫來執行某些操作。或者您可以在您的應用程式中建立不同的網址並讓它處理它。