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中使用透明代理不会干扰在另一个中使用它。)
答案 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"
但是,这并不完全透明;应用服务器需要以代理方式提供页面。但它可能有一些用处。