17

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在 htaccess 中不起作用

如何在共享主机情况下设置透明代理,或者这不可能?

(这似乎是合理的,因为 Rewrite 已经完成了 80% 的工作,并且在一个 htaccess 中拥有一个透明代理不会干扰在另一个 htaccess 中拥有它。)

4

1 回答 1

24

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

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

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

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

然后在应用程序服务器上——在本例中为 JIRA 安装——我适当地配置了 Java Tomcat/Catalina 以提供带有代理信息的页面:

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

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

于 2013-10-17T06:22:37.620 回答