我需要将路径映射到我的tomcat Web应用程序。我为此使用了proxypass。 这是apache2中的当前配置
<VirtualHost *:80>
ServerName localhost:80
ProxyPass /app http://localhost:8088/ui/
ProxyPassReverse /app http://localhost:8088/ui/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这从tomcat获取HTML但是形成的css url是错误的。该网址不是http://localhost/app/css/style.css
,而是映射为http://localhost/ui/css/style.css
。
我尝试过使用重写但是没有用。
RewriteEngine on
RewriteRule ^/ui/ /app/
我需要找到正确的方法来更正网址。 任何帮助将不胜感激!提前谢谢。
答案 0 :(得分:2)
经过大量的反复试验,我发现了两个不同的解决方案。
使用mod_rewrite和proxypass的一些更改:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /app http://localhost:8080/ui/
ProxyPassReverse /app http://localhost:8080/ui/
#since in java web app the context started with /ui the js src had /ui in the beginning
#this resulted in 404 so I had to rewrite all request to /ui to forward to /app
RewriteEngine on
RewriteRule "^/ui(.+)" "/app$1" [R,L]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在webapp文件夹中为已部署的应用程序创建链接/ shorcut,并将shorcut命名为app
在linux中,命令是(来自webapp文件夹内)ln -s ui app
现在apache配置是:
<VirtualHost *:80>
ProxyPreserveHost On
<Location /app>
ProxyPass ajp://localhost:8019/app/
ProxyPassReverse ajp://localhost:8019/app/
SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyHTMLURLMap /app /app
RequestHeader unset Accept-Encoding
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在第一个解决方案中,重写mod导致请求在重定向到正确的url之前返回304。这就是默认情况下的工作方式。
在第二个解决方案中,因为两个处理程序是相同的(/ app),所以没有理由进行重定向,并且URL被正确映射。
答案 1 :(得分:0)
这取决于您希望显示的网址。如果你想要它
然后,您需要在WAR中的/ ui /下移动静态内容。
如果你想要
然后你应该从你的ProxyPass行删除尾随/ ui
作为第三个选项,您可以在tomcat webapp目录中创建一个'ROOT'符号链接到'ui'(并从代理中删除/ ui),这样您就可以从tomcat路径的根目录提供应用程序了