2011-08-04 165 views
4

我有一個Java應用程序響應多個域,併爲每個域使用特定的apache虛擬主機。這是因爲Apache比tomcat更快,可以提供靜態資源。apache虛擬主機和「動態」域

需要在運行時執行此操作,而無需重新啓動apache配置。 要執行這個動作我使用VirtualDocumentRoot指令,如下所述:

AddType text/html .html .shtml 
AddOutputFilter INCLUDES .html .shtml 

NameVirtualHost *:80 
UseCanonicalName Off 
<VirtualHost *:80> 
    ServerName domain.com 
    ServerAlias * 

    # Define virtual host directory, using entire domain 
    VirtualDocumentRoot /path/to/whosts/%0 

    # Define directory access 
    <Directory "/path/to/whosts/"> 
     Options -Indexes MultiViews +Includes 
     Order allow,deny 
     Allow from all 
    </Directory> 

    # Define Java Proxies 
    <Proxy *> 
     AddDefaultCharset Off 
     Order deny,allow 
     Allow from all 
    </Proxy> 

    # Allow Libs (static resources) to access apache directly 
    ProxyPass /libs ! 
    ProxyPass/ajp://localhost:8009/ 
    ProxyPassReverse/ajp://localhost:8009/ 
</VirtualHost> 

這並不能很好的工作,因爲如果我嘗試訪問www.domain.com,要比訪問domain.com不同。

您認爲註冊從www.domain.comto domain.com的符號鏈接是個好主意嗎?

存在另一種方式來做到這一點?我在apache管理方面真的很差...

非常感謝!

Ciao,Davide。

回答

2

我經常使用的符號鏈接做類似這樣的配置時,多個域鏈接到同一Web根目錄,存在這樣的解決方案沒有明確的危害如此絕對沒有理由避開它。

0

一個好方法是將決定哪些類型的網址應該是一個規範,並使用mod_rewrite將URL重定向到它 - 例如,匹配請求domain.com並重定向到www.domain.com。有很多關於如何在Web上提供的教程,您應該可以輕鬆找到這些教程。

關閉我的頭頂,你可以使用類似:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.$ [NC] 
RewriteRule ^(.*) http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

那會,如果您使用SSL,但會導致問題由於硬編碼http://。我想你可以在重寫規則行更改爲以下,以避免:

RewriteRule ^(.*) %{SERVER_PROTOCOL}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]