如何在不实际更改 Apache 中的 URL 的情况下将请求转发到另一个 URL?

如何在不实际更改 Apache 中的 URL 的情况下将请求转发到另一个 URL?

我在域中运行 Apache,例如 http://example.com。我的服务器上还运行 Tomcat,并且我已将所有对 http://example.com/t/ 的请求转发到 Tomcat,所有其他 URL 均由 Apache 直接提供服务。

我的问题是,我有一个类似 http://example.com/bar 的 URL,但我希望 tomcat 处理该 URL,因此它实际上应该指向 http://example.com/t/bar。换句话说,该 URL 应该由获取应用程序上下文“bar”的 Tomcat 处理。

问题是,我不太清楚如何为此制定正确的重写规则。我尝试将其添加到 sites-available/default

RewriteEngine on
RewriteRule ^/bar(.*) /t/bar$1 [R]

但这不会保留 URL,而是仅重定向到带有 /t/ 前缀的 Tomcat URL。如果我删除 [R],那么我只会得到 404。

什么是正确的 RewriteRule 来解决我的问题?

答案1

您需要使用 [P] 选项来代理它。这还需要您设置 mod_proxy。

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html并搜索“强制代理”。

请记住,这会给您的 Apache 增加额外的负载。负载的大小取决于您收到的流量大小以及 Tomcat 服务器将流量返回给 Apache 的速度。

您也可以简单地在 mod_proxy_ajp 规则或 mod_jk 配置(JkMount)中包含 /bar,这将是比使用 mod_rewrite 更好的解决方案。

答案2

您如何通过 /t/* 处理 Tomcat 连接?是通过 mod_proxy 吗?

我认为您可能需要使用 mod_proxy 或者 mod_alias 而不是 RewriteRule,因为 /t/ 不是 apache 服务器上的实际目录,而是转发到其他目录。

相关内容