一個 VirtualHost 用於某些 URL,另一個 VirtualHost 用於 Apache 中的所有其他 URL

一個 VirtualHost 用於某些 URL,另一個 VirtualHost 用於 Apache 中的所有其他 URL

是否可以將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即使有一個名為fooin的目錄/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

虛擬主機用於處理請求的網域部分,以便您可以在同一台伺服器上託管多個網域。

您可以使用別名或重寫來執行某些操作。或者您可以在您的應用程式中建立不同的網址並讓它處理它。

相關內容