Apache proxypass不解析图像和css等资源的URL

时间:2016-10-31 10:04:52

标签: apache tomcat mod-rewrite mod-proxy proxypass

我需要将路径映射到我的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/

我需要找到正确的方法来更正网址。 任何帮助将不胜感激!提前谢谢。

2 个答案:

答案 0 :(得分:2)

经过大量的反复试验,我发现了两个不同的解决方案。

  1. 使用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>
    
  2. 在webapp文件夹中为已部署的应用程序创建链接/ shorcut,并将shorcut命名为app 在linux中,命令是(来自webapp文件夹内)ln -s ui app

  3. 现在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)

这取决于您希望显示的网址。如果你想要它

http://localhost/app/

然后,您需要在WAR中的/ ui /下移动静态内容。

如果你想要

http://localhost/app/ui

然后你应该从你的ProxyPass行删除尾随/ ui

作为第三个选项,您可以在tomcat webapp目录中创建一个'ROOT'符号链接到'ui'(并从代理中删除/ ui),这样您就可以从tomcat路径的根目录提供应用程序了