我使用以下配置使用httpd和tomcat:
ProxyPass / ajp://localhost:8009/MyProject
ProxyPassReverse / ajp://localhost:8009/MyProject
这很好用,但是当我呈现HTML时,来自tomcat的图像链接不起作用:
<img src="/MyProject/img/image.jpg"/>
正如我所料:
<img src="/img/image.jpg"/>
答案 0 :(得分:2)
您的图像放在tomcat的路径/img/image.jpg中,它是上下文相对路径,绝对路径是/MyProject/img/image.jpg,用于您的tomcat,尽管它是/ img / image。在apache之外的jpg。你代理/ - &gt; / MyProject所以当你将上下文名称添加到路径'MyProject'时,它实际上不像你提到的那样工作。
解决方案1:
在tomcat中使用上下文相对路径
img/image.jpg
在这种情况下,您必须小心所需的URI,例如/ MyProject / page1 / action1 /具有图像相对路径
../../img/image.jsp
解决方案2:
将文档根路径与前导斜杠
一起使用/img/image.jpg
并使用文档根(' href '属性)定义元素 base 。请注意链接!
<head>
<base href="http://www.mydomain.com/">
</head>
请参阅http://www.w3schools.com/tags/tag_base.asp
解决方案3:
将项目映射到apache中与
ProxyPass /MyProject ajp://localhost:8009/MyProject
解决方案4:
使用内容过滤器,例如mod_proxy_html http://httpd.apache.org/docs/current/mod/mod_proxy_html.html
注意:此解决方案有点慢(与您使用的过滤器无关)!
请注意 PROXY CONFIGURATION !!!
这只是重定向等,但你有一个错误的ProxyPathReverse配置!
ProxyPass / ajp://localhost:8009/MyProject
ProxyPassReverse /MyProject http://www.mydomain.com/
查看完整说明 http://www.humboldt.co.uk/the-mystery-of-proxypassreverse/#more-131
答案 1 :(得分:0)
您需要:
使用mod_html
重写链接。这很慢,表明你做错了。
从/ to / MyProject发出重定向,您可以使用RewriteRule或<meta http-equiv="refresh" content="0; url=http://<host>/MyProject/">
中的/index.html,
进行更改{{1}
ProxyPass
这样代理就不会乱用URL路径。这是迄今为止更好的技术。您可能根本不需要ProxyPass /MyProject ajp://localhost:8009/MyProject
指令,但如果这样做,则应该应用相同的更改。
答案 2 :(得分:0)
我还没有对此进行测试以确保准确性(并且AJP倾向于将诸如Apache中的重写之类的内容短路,从而进行额外的测试和调整几乎是强制性的)。因此,通过这个小小的AJP免责声明,您可以尝试以下方式:
ProxyPass /MyProject ajp://localhost:8009/MyProject
ProxyPassReverse /MyProject ajp://localhost:8009/MyProject
ProxyPass / ajp://localhost:8009/MyProject
ProxyPassReverse / ajp://localhost:8009/MyProject
只是尝试在入站上捕获那些不正确的图像路径。如果失败,请尝试使用尾部斜杠。