2016-01-22 87 views
0

我在tomcat前面使用apache,所以我可以使用mod_proxy將請求從域重定向到tomcat url。我在服務器上遇到了一個問題,在使用子域時,它想要返回到基本域。有沒有辦法將example.com/foo的所有請求重定向到foo.example.com?Apache重定向來自域名+路徑的請求

<VirtualHost *:80> 
ServerName example.com/app 
ProxyPreserveHost Off 
ProxyPass/http://app.example.com:8080/AppName/ 
ProxyPassReverse/http://app.example.com:8080/AppName/ 
</VirtualHost> 

上面的示例不起作用。我推測這是因爲我無法在服務器名稱中包含路徑。

下面是我根據接受的答案標記的工作版本。

<VirtualHost *:80> 
ServerName example.com/app 
ProxyPreserveHost Off 
ProxyPass/http://app.example.com:8080/AppName/ 
ProxyPassReverse/http://app.example.com:8080/AppName/ 

# Rewrite all request from example.com/foo to foo.example.com 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^/foo/?(.*) http://foo.example.com/$1 [R,L] 
</VirtualHost> 

回答

0

嚴格地講到你最初的文章中的最後一條語句,「有什麼方法可以重定向來自example.c的所有請求om/foo到foo.example.com「。

您可以使用重寫來完成此操作。例如:

的RewriteCond%{HTTP_HOST} ^例如\ .COM $ [NC]
重寫規則^ /富/?(.*)http://foo.example.com/ $ 1 [R,L]

這假設你的重寫模塊被加載並啓用:

的LoadModule rewrite_module模塊/ mod_rewrite.so
RewriteEngine敘述在

+0

我正在努力如何使用重寫,因爲這實際上不是一個Apache網站。 Apache實際上只是坐在前面,並將請求轉發到一個tomcat應用程序url。 – ryandlf

+0

劃痕。這工作。我沒有在.htaccess中包含重寫(因爲我沒有),而是直接將其包含在虛擬主機中。我將在原始帖子中包含正在運行的虛擬主機標籤。 – ryandlf

0

你可以在apache中使用mod_rewrite。確保以root身份啓用它:

a2enmod rewrite 

這將確認它已啓用或已經是。如果它已啓用,則需要重新啓動Apache。

然後在你的虛擬主機的根目錄創建/編輯.htaccess文件,並添加一行:

Redirect /foo/ http://foo.example.com/ 

根據您的具體目錄的權限,你可能需要允許覆蓋該目錄

<Directory /your/path/here> 
    AllowOverride All 
</Directory> 

HTH

+0

我實際上沒有任何生活中的Apache。所有我使用的Apache是​​重定向到我的Tomcat應用程序。這在這種情況下還能工作嗎? – ryandlf

+0

這也將保留路徑的其餘部分? example.com/foo/more to foo.example.com/more。 – ryandlf

+0

嗯可能不會,對不起。我相信你可以使用Mod_rewrite來實現你的目標,雖然可能值得閱讀這篇文章,可能會更好地幫助你解決問題。 http://stackoverflow.com/questions/603765/how-do-i-redirect-from-apache-to-tomcat – Graeme

相關問題