Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 如何在.htaccess中设置代理_Apache_.htaccess_Proxy_Transparentproxy - Fatal编程技术网

Apache 如何在.htaccess中设置代理

Apache 如何在.htaccess中设置代理,apache,.htaccess,proxy,transparentproxy,Apache,.htaccess,Proxy,Transparentproxy,Apache文档指出,RewriteRule和应该放在服务器配置中,但由于共享主机的情况,它们可以放在htaccess中。我正处于这种情况 我正在尝试设置透明代理: RewriteEngine On RewriteCond %{REQUEST_URI} ^/foo [OR] RewriteCond %{REQUEST_URI} ^/bar RewriteRule ^(.*)$ http://example.com/$1 [P] 除了重定向(比如if/foo重定向到/bar)之外,这一切

Apache文档指出,RewriteRule和应该放在服务器配置中,但由于共享主机的情况,它们可以放在htaccess中。我正处于这种情况

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

 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/foo [OR]
 RewriteCond %{REQUEST_URI} ^/bar
 RewriteRule ^(.*)$ http://example.com/$1 [P]
除了重定向(比如if
/foo
重定向到
/bar
)之外,这一切都很正常。重定向返回example.com,而不是我的服务器

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

与重写指令不同

如何在共享托管情况下设置透明代理,或者这是不可能的


(这似乎是合理的,因为重写已经达到了80%,在一个htaccess中使用透明代理不会影响在另一个htaccess中使用透明代理。)

不幸的是,我相当确定您想要做的是不可能的:我正试图做完全相同的事情!根据我的研究,我相当确信这是不可能的

简单地说,您需要使用ProxyPassReverse,它仅在VirtualHost级别(或类似级别)可用;不是一个访问级别

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

  RewriteEngine on
  RewriteRule  (.*)  http://localhost:8080/$1  [P,L] 
然后在应用服务器上——在本例中是JIRA安装——我适当地配置了Java Tomcat/Catalina,以便为页面提供代理信息:

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

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

你能试试:
RewriteRule^(foo|bar)/?$http://example.com/$1[P,L]
这与我写的内容相同,除了
L
标志,这只是表明不应该再测试更多的规则。apache文档说明,包含
P
会强制添加
L
,我认为您可能是对的。不过,我很烦我,因为没有什么好的理由说明这不能工作。对你来说,这是一个简单配置JIRA的例子。如何配置任何web服务器来为具有代理信息的页面提供服务?
proxied information
是什么意思?这里的“proxied information”指的是web服务器知道其实际访问的地址。这意味着它可以将数据发送回具有正确地址和/或端口的客户机,客户机希望在这些地址和/或端口上访问数据。(在我上面的示例中,JIRA服务器实际上正在侦听端口8080;但是,客户端在端口80上访问它。Apache重写规则处理来自80->8080的请求,但JIRA服务器需要知道它将收到的请求(以及它所做的回复)实际上是在其他地方处理的。)简单来说?您不能透明地执行此操作。谢谢,在共享主机环境中,此操作对我来说非常有效。