Proxypass和proxypassreverse可能使用RewriteRule

时间:2016-11-28 09:09:38

标签: apache .htaccess mod-rewrite proxy reverse-proxy

我对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 而不删除对网络应用中应用的访问权限?

感谢任何有用的答案或链接。

1 个答案:

答案 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样式文件。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。