我们运行的是 Tomcat 5.5 和 Apache 2.2 mod_proxy。我们希望 URL 更漂亮。例如,我们的 URL 现在大致是这样的:
http://example.com/foo/app/home (home page)
http://example.com/foo/app/bar (other parts of the web app)
http://example.com/foo/api/qux (API hooks)
http://example.com/foo/quux (misc)
我们希望公开的 URL 更简单,例如:
http://example.com/ (home page)
http://example.com/bar (other parts of the web app)
http://example.com/api/qux (API hooks)
http://example.com/quux (misc)
我知道如何让 Apache 将传入的 URL 重写为 Tomcat 使用的较长的 URL,但我担心这可能会使 Tomcat 感到困惑。我对 Apache 相当有经验,但对 Tomcat 来说是个新手。
此外,我们希望通过重写而不是重定向来实现这一点(例如,http://example.com/不应该简单地重定向到http://example.com/foo/app/home),因为我们希望将丑陋的 URL 完全排除在地址栏之外。
答案1
如果要将所有内容重写到一个公共位置,则通常会执行以下操作:
ProxyPass / http://localhost:8080/foo/
ProxyPassReverse / http://localhost:8080/foo/
如果您需要针对不同的路径使用不同的规则,您可能会在一系列 RewriteRules 上使用 Proxy 标志:
RewriteRule /bar/(.*) http://localhost:8080/foo/app/bar/$1 [P]
RewriteRule /api/qux/(.*) http://localhost:8080/foo/api/qux/$1 [P]
RewriteRule /quux/(.*) http://localhost:8080/foo/quux/$1 [P]
RewriteRule /(.*) http://localhost:8080/foo/app/$1 [P]
这会将内容发送到 Tomcat 中的适当位置。
唯一的复杂情况是应用程序动态生成具有完整路径的 URL。在这种情况下,您需要修复应用程序,或者使用类似mod_proxy_html重写 HTML 内容中的链接。