2016-01-22 53 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

相关问题