2010-12-12 3 views
0

Я хочу перенаправить весь сайт из одного домена в другой. Я работаю, когда объявляю RewriteRule с R = 301, но пользователь может легко заметить, что он перенаправлен на другой URL-адрес в своем навигационном баре. В результате я хочу использовать удаленный сервер для отображения содержимого с сохранением URL-адресов с локального сервера.Перенаправление всего сайта с htaccess в другой домен

Например: Пользовательские типы example1.com, htaccess получает контент из example2.com (для главной страницы и для каждой подстраницы в example1.com). Сервер не перенаправляет браузер, а просто загружает удаленные данные из example1.com.

Это работает, когда я просто использовать file_get_contentes ('example2.com ... но проблема возникает, если есть какие-то данные $ _POST.

ответ

2

не ответ на ваш вопрос, но это решение не является оптимальным по ряду причин:

  1. Это зависит от два серверов быть вверх.
  2. Это медленнее, поскольку запрос должен быть сделан дважды.
  3. Требуется удвоить пропускную способность, и если вы используете скрипт PHP, дополнительные ресурсы на прокси-сервере.

У вас есть , у вас есть?

Если вы действительно, смотрите в апача proxying capabilities вместо PHP скрипт, который может справиться с этой проблемой вы описываете (и несколько других, для управления пример сеанса, и проходя через HTTP_REFERER и HTTP_USER_AGENT переменных). Here - это учебник для него.

Обратите внимание, что для этого требуется корневой доступ к серверу.

1

Вы не можете сделать такой редирект через домены, используя только mod_rewrite. RewriteRule, который пишет на адрес на другом сервере, всегда будет вести себя так, как будто он имеет флаг R.

Вы, вероятно, придется использовать некоторые сценариев на стороне сервера, не знаю, как же.

2

Я не Полагайте, что это возможно с .htaccess.
Не могли бы вы добавить example1.com как псевдоним в httpd.conf для example2.com и изменить записи DNS для example1.com, чтобы указать на тот же самый компьютер, что и example2.com?

Это позволит вам добиться того, что вам нужно, и вырезать посредника (сервер example1.com).

+0

Я не могу сделать это, потому что домен указывает сервер электронной почты в example1, или, может быть, есть способ указать example2 на http в example1, но сервер электронной почты на example2? –

+0

Вы имеете в виду адрес электронной почты для [email protected], все еще нужно перейти на сервер example1.com? отлично, вы можете сохранить запись MX по-прежнему указывая на сервер example1.com для электронной почты, чтобы по-прежнему туда ехать. – Ben

3

Чистое решение заключается в том, чтобы сервер, который обрабатывает example2.com, отвечает на запросы, отправленные на example1.com. Обычно это делается путем настройки виртуального хоста Apache для использования ServerName example2.com и ServerAlias example1.com.

Если вы не можете позволить себе это сделать, вы должны полагаться на фактический прокси-и-обратный прокси вместо того, чтобы делать это самостоятельно с помощью PHP: он быстрее, и он правильно обрабатывает абсолютные URL-адреса (что произойдет, если example2.com возвращает HTML, который содержит <a href="http://example2.com/xxx">?). Apache имеет правильную прокси-версию и обратную реализацию прокси-сервера.

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); 

Я понимаю, что это довольно хромой решение, но она хорошо работает.

Смежные вопросы