我可以访问 Web 服务器上的一个文件夹,我想在其中放置一个 .htaccess 文件,这样当用户访问 www.somesite.com/myfolder/index.html 时,他们会看到另一个域 www.someothersite.com/blah/blah2/blah3/index.php?user=80338 上的页面内容,该域的 URL 非常长,而我无权访问该文件夹。但是,我不希望用户在浏览器中看到此 URL,而只是让它在后台发生 - 我尝试阅读一些有关 Web 的教程,我想到的内容位于 myfolder 目录中:
RewriteEngine On
RewriteRule ^index\.html$ http://www.someothersite.com/blah/blah2/blah3/index.php?user=80338 [QSA,L]
这似乎执行了重定向,但我也获得了新的 url,我该如何停止这种情况?
答案1
设置 ProxyPass 是可行的,但我最近发现你可以用重写做类似的事情。在末尾使用 [P] 标志RewriteRule
将导致重写由 处理mod_proxy
。基本示例如下:
RewriteRule ^(.*)$ http://www.example.com/$1 [P]
答案2
任何外部 301 或 302 重定向到其他页面都将在浏览器 URL 地址栏中显示为当前位置。要实现您想要的结果,您必须将当前父文档保留为本地 index.html。因此,您有几个选项可以做到这一点。(可能不是完整的列表......)
将请求包装在 ProxyPass 中
(这对于最终用户来说可能是最透明的,因为他们无法检测到该页面实际上是远程托管的,但稍微有点麻烦)
要隐藏客户端的重定向,您需要在httpd.conf
VirtualHost 文件中代理请求,如下所示;
<Location /index.html>
ProxyPass http://www.someothersite.com/blah/blah2/blah3/index.php?user=80338
</Location>
要启用上述指令,您需要安装并启用mod_proxy_http
依赖于系统的 apache2 模块(例如 yum、apt、a2enable)
但是,您会遇到一些有趣的 URL 映射问题,您必须根据具体情况解决这些问题,因此要使其透明地工作需要付出一些努力。
例如,这取决于远程文档中的链接是相对的还是完全限定的。您可以使用 ProxypassReverse 和 Mod_substitute 规则修复每个链接和 URL。
替代方案:将页面加载到 iframe 中(或者使用旧式框架)
你可以使用 iframe,将显示为浏览器 URL 地址栏,并加载远程文档进入 iframe与这样的事情;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="EN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Full Page IFrame</title>
<style type="text/css">
html {overflow: auto;}
html, body, div, iframe {margin: 0px; padding: 0px; height: 100%; border: none;}
iframe {display: block; width: 100%; border: none; overflow-y: auto; overflow-x: hidden;}
</style>
</head>
<body>
<iframe id="tree" name="tree" src="http://www.someothersite.com/blah/blah2/blah3/index.php?user=80338"
frameborder="0" marginheight="0" marginwidth="0"
width="100%" height="100%" scrolling="auto"></iframe>
</body>
</html>
使用旧时尚框架集
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head><title>My First Frame Page</title>
</head>
<frameset cols="100%">
<frame src="http://www.page3.com">
</frameset>
</html>