如何在.htaccess中设置代理

时间:2013-10-06 03:25:10

标签: apache .htaccess proxy transparentproxy

Apache文档声明RewriteRule应该放在服务器配置中,但是由于共享托管情况,它们可以放在htaccess中。我处于这种情况。

我正在尝试设置透明代理:

 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/foo [OR]
 RewriteCond %{REQUEST_URI} ^/bar
 RewriteRule ^(.*)$ http://example.com/$1 [P]

这样做很好......除了重定向(例如/foo重定向到/bar)。重定向返回到example.com,而不是我的服务器。

我理解ProxyPassReverse指令会解决此问题,但当我将其添加到.htaccess

时,我会收到“内部服务器错误”页面

与Rewrite指令不同,ProxyPassReverse will not work in htaccess

如何在共享主机环境中设置透明代理,或者这是不可能的?

(这似乎是合理的,因为Rewrite已经获得了80%的路径,并且在一个htaccess中使用透明代理不会干扰在另一个中使用它。)

1 个答案:

答案 0 :(得分:14)

不幸的是,我很确定你想做什么是不可能的:我正在尝试做同样的事情!根据我的研究,我相信这是不可能的。

简而言之,您需要使用ProxyPassReverse,它仅在VirtualHost级别(或类似)可用;不是htaccess级别。

编辑:我实现这一目标的唯一方法是配置响应服务器/应用程序以了解它在代理后面,并适当地提供页面。也就是说,我使用.htaccess重定向到另一台服务器,如下所示:

  RewriteEngine on
  RewriteRule  (.*)  http://localhost:8080/$1  [P,L] 

然后在应用程序服务器上 - 在这种情况下,JIRA安装 - 我适当地配置Java Tomcat / Catalina以提供具有代理信息的页面:

 proxyName="my.public.address.com"
 proxyPort="80"

但是,这并不完全透明;应用服务器需要以代理方式提供页面。但它可能有一些用处。