不知道这是否是正确的堆栈交换发布此。 如果有更好的地方请redirect我 – 谢谢。
我在httpd.conf中启用了这些行:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so
然后我添加了这些行:
ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /goo http://google.ca ProxyPassReverse /goo http://google.ca
如果我打开我的浏览器并转到此URL:
http://localhost/goo
我被redirect到:
http://www.google.ca
我预计,mod_proxy将像一个代理,而不是只是redirect到谷歌。 我希望我的浏览器不应该知道google.ca存在,应该只知道代理服务器的存在。
- 这里发生了什么?
那么,让我们看一下http://google.ca :
$ curl -D /dev/stdout http://google.ca HTTP/1.1 301 Moved Permanently Location: http://www.google.ca/ . . . <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.ca/">here</A>. </BODY></HTML>
还有你的redirect。 Google在google.com , google.ca和其他人可能会这样做。
- 这不是什么mod_proxydevise的?
当然。 它正在按照您要求的方式执行…它从http://google.ca获取内容并逐字将其返回给客户端。
- 还有别的东西我应该用吗?
如果你真的想在一个特定的URL上像通用的正向代理一样行事,你可能需要调查mod_proxy_html ,它可以用来重写从远程服务器获取的内容中的链接。
但总的来说,防止远程站点执行这种redirect是非常困难的(因为即使重写Location标头, <A>标签和其他地方的链接,您可能会错过一些Javascript或其他东西)
mod_proxy实际上会重写HTTPredirect响应上的“位置”,“内容位置”和“URI”头。 正如谷歌解释说,301谷歌正在做的原因
ProxyPassReverse /goo http://google.ca
无效,因为redirect到www.google.ca不匹配。
你可以尝试添加
ProxyPassReverse /goo http://www.google.ca
但目前还不清楚你正在努力完成什么。