我有以下设置来屏蔽/重定向带端口的URL到代理 离。
VirtualHost *:80>
ServerName psweb1.example.com
ServerAlias psweb1.example.com
ProxyPass /demo1 http://psweb1.example.com:8002/
ProxyPassReverse /demo1 http://psweb1.example:8002/
</VirtualHost>
此设置的问题在于重定向不会捕获任何相对路径。
例如 psweb1.example.com:8002/main/login/login.jsp重定向到psweb1.example.com/demo1/main/login/login.jsp
登录后: 重定向不遵循psweb1.example.com/demo1/*的结构 而是尝试返回到psweb1.example.com / *
如何确保正确的映射始终与所有正确的相对路径保持一致? 如:
psweb1.example.com:8002/main > psweb1.example.com/demo1/main
psweb1.example.com:8002/main/login > psweb1.example.com/demo1/main/login
psweb1.example.com:8002/side/* > psweb1.example.com/demo1/side/*
等等。
答案 0 :(得分:1)
我认为你的问题实际上是绝对路径。我怀疑相对路径是否正常工作。考虑:
您的浏览器会抓取一个页面psweb.example.com/demo1/main/
,其中包含<a href="login">...</a>
形式的链接。当您按照该链接浏览时,浏览器将获取/demo1/main/login
,这正是您想要的。
现在考虑<a href="/main/login">...</a>
形式的链接。这是绝对链接。在这种情况下,您的浏览器将会抓取psweb.example.com/main/login
。
您无法使用ProxyPass指令解决此问题,因为它与浏览器和服务器之间的HTTP交换无关。这是Web应用程序生成的HTML内容的问题。您通常有几个选择:
正确配置Web应用程序。许多应用程序都有某种“基本URL”设置,专门针对这种情况而设计。
修复Web应用程序。编辑代码以(a)始终生成相对链接或(b)始终添加正确的基本URL。
使用HTML过滤器,例如mod_proxy_html,它可以作为Apache的最新版本(我认为是2.4及更高版本)的一部分,也可以作为早期版本的第三方模块。< / p>