使用htaccess将整个站点重定向到其他域

时间:2010-12-12 12:36:12

标签: apache .htaccess mod-rewrite

我想将整个网站从一个域重定向到另一个域。 我宣布时工作 RewriteRule,R = 301,但用户可以轻松注意到 他被重定向到他的导航栏中的其他网址。 我想要实现的结果是使用远程服务器来显示内容 网址来自本地服务器。

例如: 用户类型为example1.com,htaccess从example2.com获取内容 (对于example1.com中的主页面和每个子页面)。服务器没有 重定向他的浏览器,但只是从example1.com加载远程数据。

当我只使用file_get_contentes('example2.com ...但是 如果有一些$ _POST数据,就会出现问题。

5 个答案:

答案 0 :(得分:3)

干净的解决方案是让处理example2.com的服务器响应发送给example1.com的请求。这通常通过配置Apache虚拟主机以使用ServerName example2.comServerAlias 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)

不是您问题的答案,但由于多种原因,此解决方案并非最佳:

  1. 这取决于两台服务器正在运行。
  2. 由于必须进行两次请求,因此速度较慢。
  3. 它占用了两倍的带宽,如果您使用PHP脚本,则代理服务器上还有其他资源。
  4. 你确定你这样做吗?

    如果您真的这样做,请查看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);

我意识到这是非常蹩脚的解决方案,但效果很好。