我想将整个网站从一个域重定向到另一个域。 我宣布时工作 RewriteRule,R = 301,但用户可以轻松注意到 他被重定向到他的导航栏中的其他网址。 我想要实现的结果是使用远程服务器来显示内容 网址来自本地服务器。
例如: 用户类型为example1.com,htaccess从example2.com获取内容 (对于example1.com中的主页面和每个子页面)。服务器没有 重定向他的浏览器,但只是从example1.com加载远程数据。
当我只使用file_get_contentes('example2.com ...但是 如果有一些$ _POST数据,就会出现问题。
答案 0 :(得分:3)
干净的解决方案是让处理example2.com
的服务器响应发送给example1.com
的请求。这通常通过配置Apache虚拟主机以使用ServerName example2.com
和ServerAlias example1.com
来完成。
如果你负担不起,你应该依靠一个实际的代理和反向代理,而不是自己用PHP做它:它更快,它正确处理绝对URL(如果example2.com
会发生什么返回包含<a href="http://example2.com/xxx">
的HTML?)。 Apache有一个正确的代理和反向代理实现。
答案 1 :(得分:2)
我不相信.htaccess可以做到这一点 您是否可以在example2.com的httpd.conf中添加example1.com作为别名,并将example1.com的DNS记录更改为指向与example2.com相同的计算机?
这将实现您的目标并切断中间人(example1.com的服务器)。
答案 2 :(得分:2)
不是您问题的答案,但由于多种原因,此解决方案并非最佳:
你确定你有这样做吗?
如果您真的这样做,请查看Apache的proxying capabilities而不是可以处理您描述的问题的PHP脚本(以及其他几个,例如会话管理,并通过HTTP_REFERER
和{ {1}}变量)。 Here是一个教程。
请注意,这需要对服务器进行root访问。
答案 3 :(得分:1)
您不能仅使用mod_rewrite跨域进行此类重定向。写入另一台服务器上的地址的重写符将始终表现为具有R标志。
你可能不得不使用一些服务器端脚本,但不知道如何。
答案 4 :(得分:0)
我通过使用:
解决了它$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => (isset($_POST)) ? http_build_query($_POST) : '',
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://example2.com/'.$_SERVER['REQUEST_URI'], false, $context);
我意识到这是非常蹩脚的解决方案,但效果很好。