我对proxypass和proxypass逆转有疑问。
我希望能够在我的应用(内部)
上达到以下内容https://examplehost/的应用程序名称 / Servletname?方法通话
但我希望从外部进入网站的人看到以下内容:
https://examplehost/Servletname?method-to-call
我的apache2 .conf文件中有以下内容
Proxypass
/ http://examplehost/appname/
ProxypassReverse
/ http://examplehost/
但是,当我从外部调用我自己的网站时,我收到以下错误消息:
请求网址与收件人网址不匹配," / appname / Servletname?"不 不匹配" / Servletname?
这表明外部链接不仅有匹配问题,而且它首先看到错误的链接,因为外部源不可能看到" appname"。
我还尝试在.conf文件中执行以下操作
Proxypass
/ http://examplehost/appname/
ProxypassReverse
/ http://examplehost/appname/
有没有人知道如何隐藏 appname 而不删除对网络应用中应用的访问权限?
感谢任何有用的答案或链接。
答案 0 :(得分:1)
一个简单的内部RewriteRule
应该允许重写这是一种透明的方式。无需代理策略及其附加请求往返:
RewriteEngine on
RewriteRule ^/?Servletname$ /appname/Servletname [L,QSA,NC]
我真的不明白你引用的错误信息,但我的信息很少。问题是哪个组件给出了错误消息...服务器端?客户端? servlet方面?
当您需要使用代理模块时(为什么......),请查看apache的重写模块提供的P
标志。或者使用ProxyPass
指令当然也应该是可能的,我只是没有看到任何理由。不过我会建议这样的事情:
ProxyPass /Servletname https://examplehost/appname/Servletname
ProxyPassReverse /Servletname https://examplehost/appname/Servletname
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用.htaccess样式文件。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。