例如,我在域中运行 Apache http://example.com
。我的服务器上还运行 Tomcat,并且我已将所有请求转发给http://example.com/t/
Tomcat,而所有其他 URL 均由 Apache 直接提供服务。
我的问题是我有一个类似的 URL http://example.com/bar
,但它实际上应该指向http://example.com/t/bar
。
换句话说,该 URL 应该由 Tomcat 处理,并获得应用程序上下文“bar”。
问题是,我不太清楚如何为此制定正确的重写规则。我尝试将其添加到 sites-available/default
RewriteEngine 开启 重写规则 ^/bar(.*) /t/bar$1 [R]
但这不会保留 URL,而只是重定向到带有前缀的 Tomcat URL /t/
。如果我删除[R]
,则只会得到 404。
什么方法RewriteRule
可以正确解决我的问题?
答案1
您应该在 mod_rewrite 规则中使用“P”(代理)选项,以便在服务器内部完成。您还需要启用mod_proxy。
‘proxy|P’(强制代理)
此标志强制将替换部分作为代理请求在内部发送,并立即(重写处理在此停止)通过代理模块。您必须确保替换字符串是有效的 URI(通常以 http://主机名) 可以由 Apache 代理模块处理。否则,您将收到来自代理模块的错误。使用此标志可以实现更强大的 ProxyPass 指令实现,以将远程内容映射到本地服务器的命名空间中。
注意:必须启用 mod_proxy 以便使用该标志。